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

标签 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...

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

最佳答案

它被称为统一初始化,是在 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 ;并使用 {} 避免参数的隐式有损缩小。参见 this GotW了解更多详情。

关于c++11 - 此 Nana 演示代码中使用的 C++ 功能是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31180156/

相关文章:

c++ - 如何理解 C++ 标准 N3337 中的 expr.const.cast 条款 8?

c++ - 编译 nana 库时不能包含 <X11/Xft/Xft.h>,没有那个文件或目录

c++ - 为 C++ 构建 nana 时出现 "make"错误

c++ - 在 nana C++ GUI 应用程序中设置窗口图标

c++ - 这可以用静态类型来完成吗?

c++ - 如何确定模板参数是否默认?

c++ - 自定义类中的 move 与复制性能

c++ - 如何仅为父类可变模板参数启用嵌套类模板?

c++ - 更改娜娜列表框中的值

c++ - 如何将nana编译成静态库