2017-12-15 10 views
1

を機能させるエイリアス私はこのようになりますエイリアスを作成するために喜ん作成:

using window = Window::instance().getWindow(); 

Window::instance().getWindow()sf::RenderWindow型オブジェクトへの戻りポインタを、私が使用することをより便利にするために碑文を短くしたいです。

エイリアスの呼び出しは次のようになめらかになります: window->draw(object);
の代わりに: Window::instance().getWindow()->draw(object);

それはC++で可能ですか?

+0

autoを使用してC++ 11以降に短縮することができ

sf::RenderWindow *window = Window::instance().getWindow(); 

? –

+0

'Window :: instance()。getWindow()'の結果は永続的ですか?それとも、コールからコールに変わるのでしょうか?それを知らずにあなたの質問に答える方法はありません。 – AnT

答えて

0

あなたが返されたポインタは、呼び出しの間で変更されません。絶対に確信している場合は、あなたが一時的に保存することができます:

auto window = Window::instance().getWindow(); 

アプローチは、マクロを使用することで別のbad❌:

#define window (Window::instance().getWindow()) 

ただし、演​​算子の優先順位が上がらない場合は、かっこで括るようにしてください。 ので、代わりの

Window::instance().getWindow()->draw(object); 

あなたが持っているでしょう:

+1

悪いアプローチを挙げることさえ推奨しませんが、もし必要ならば、それを頭蓋骨とクロスボーンでマークし、それを最後に置いてください。 – user4581301

+0

なぜ#defineを使うのが悪いのですか? –

+1

@ Chris.Frogたとえば、このコードの 'something.window.blah'は使い物になりません。 – iBug

2

あなたはautoを使用することができます

auto* window = Window::instance().getWindow(); 
window->draw(object); 
+0

autoそれは仕事でしたが、私はそれも*自動キーワードの後に​​動作しないことに気付きました。なぜそれは両方の方法で動作し、何かを台無しにすることができますか? –

+0

@ Chris.Frog: 'getWindow()'は固定戻り型( 'sf :: RenderWindow *')を持っています。 'auto window'を使うと、' auto'は全く同じ型( 'sf :: RenderWindow *')に解決されます。'auto * window'を使うと、コンパイラは' getWindow() 'がポインタを返すのを知っているので、' auto'が指し示されている型( 'sf :: RenderWindow')に解決されます。いずれにせよ、あなたは 'sf :: RenderWindow *'ポインタで終わります。 –

+0

Okありがとうございます。 –

1

usingのみのタイプと名前空間のためです。何が欲しいのは、単純なポインタ変数である: `auto`を使用しないのはなぜ

auto *window = Window::instance().getWindow();