此 Nana 演示代码中使用的 C++ 功能是什么?
What is the C++ feature being used in this Nana demo code?
在their webpage上,娜娜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...
我从未见过这样使用 {}。
它被称为统一初始化,是在C++11中添加的。参见例如Bjarne's page 获取更多信息。
在您的特定示例中,drawing
的未命名实例是使用 fm
作为 drawing
构造函数的实际参数构造的。然后在这个 drawing
实例上调用 draw
方法。这也可以使用普通括号编写:
drawing(fm).draw([](paint::graphics& graph){
graph.string({10, 10}, L"Hello, world!", colors::red);
});
有一些细微差别:即使用 {}
会支持采用 initializer_list
的构造函数(如果存在这样的构造函数);使用 {}
可避免 Most Vexing Parse; and using {}
avoids implicit lossy narrowing of arguments. See this GotW 以获取更多详细信息。
在their webpage上,娜娜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...
我从未见过这样使用 {}。
它被称为统一初始化,是在C++11中添加的。参见例如Bjarne's page 获取更多信息。
在您的特定示例中,drawing
的未命名实例是使用 fm
作为 drawing
构造函数的实际参数构造的。然后在这个 drawing
实例上调用 draw
方法。这也可以使用普通括号编写:
drawing(fm).draw([](paint::graphics& graph){
graph.string({10, 10}, L"Hello, world!", colors::red);
});
有一些细微差别:即使用 {}
会支持采用 initializer_list
的构造函数(如果存在这样的构造函数);使用 {}
可避免 Most Vexing Parse; and using {}
avoids implicit lossy narrowing of arguments. See this GotW 以获取更多详细信息。