在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 ...
我从来没有见过{}这样使用过。
答案 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。