2

彼らのウェブページで、Nana GUIの人々はこの例を挙げています:

#include<nana/gui.hpp>

int main()
{
     using namespace nana;
     form fm;
     drawing{fm}.draw([](paint::graphics& graph){
         graph.string({10, 10}, L"Hello, world!", colors::red);
     });
     fm.events().click(API::exit);
     fm.show();
     exec();
}

drawing{fm}.draw... で始まる行で使用されている C++ 機能は何ですか?

{} がそのように使用されているのを見たことがありません。

4

1 に答える 1

6

これは一様初期化と呼ばれ、C++11 で追加されました。詳細については、 Bjarne のページなどを参照してください。

あなたの特定の例では、の名前のないインスタンスが、のコンストラクターへの実パラメーターとしてdrawing構築されます。次に、このインスタンスでメソッドが呼び出されます。これは、通常の括弧を使用して記述することもできます。fmdrawingdrawdrawing

drawing(fm).draw([](paint::graphics& graph){
     graph.string({10, 10}, L"Hello, world!", colors::red);
 });

いくつかの小さな違いがあります。つまり、 usingは(そのようなコンストラクターが存在する場合);{}を取るコンストラクターを優先します。initializer_listusingはMost Vexing Parse{}を回避します。また、使用すると、引数の暗黙的な非可逆縮小が回避されます。詳細については、この GotWを参照してください。{}

于 2015-07-02T09:06:44.517 に答える