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();
}

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

我从未见过这样使用 {}。

4

1 回答 1

6

它称为统一初始化,是在 C++11 中添加的。有关更多信息,请参见例如Bjarne 的页面

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

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

有一些细微的区别:即 using{}将有利于采用 a 的构造函数initializer_list(如果存在这样的构造函数);using{}避免了最令人烦恼的 Parse;并且 using{}避免了参数的隐式有损缩小。有关详细信息,请参阅此 GotW

于 2015-07-02T09:06:44.517 回答