此Nana演示代码中使用的C ++功能是什么?

时间:2015-07-02 09:04:24

标签: c++11 nana

their webpage上,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();
}

在开始的行中使用的C ++功能是什么:drawing {fm} .draw ...

我从来没有见过{}这样使用过。

1 个答案:

答案 0 :(得分:6)

它被称为统一初始化,并在C ++ 11中添加。参见例如Bjarne's page了解更多信息。

在您的特定示例中,drawing的未命名实例构造为fm作为drawing构造函数的实际参数。然后在此draw实例上调用drawing方法。这也可以使用普通的parens编写:

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

有一些细微差别:即使用{}会使用initializer_list的构造函数(如果存在这样的构造函数);使用{}可以避免使用Most Vexing Parse;并使用{}避免隐式有损缩小的参数。有关详细信息,请参阅this GotW