此 Nana 演示代码中使用的 C++ 功能是啥?
Posted
技术标签:
【中文标题】此 Nana 演示代码中使用的 C++ 功能是啥?【英文标题】:What is the C++ feature being used in this Nana demo code?此 Nana 演示代码中使用的 C++ 功能是什么? 【发布时间】:2015-07-02 09:04:23 【问题描述】:their webpage上,娜娜GUI人举个例子:
#include<nana/gui.hpp>
int main()
using namespace nana;
form fm;
drawingfm.draw([](paint::graphics& graph)
graph.string(10, 10, L"Hello, world!", colors::red);
);
fm.events().click(API::exit);
fm.show();
exec();
开始的行中使用的 C++ 功能是什么:drawingfm.draw...
我从未见过 被这样使用。
【问题讨论】:
考虑可读性。是的,我可以阅读(并理解)它。但是这样做我也偶然发现了drawingfm...
这一行。你并不孤单,Scooter。
【参考方案1】:
这称为统一初始化,是在 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。
【讨论】:
因此正在构造一个临时的或未命名的“绘图”对象,并且构造函数被传递给 fm 变量,然后该新对象正在调用它的 draw() 函数。对吗?以上是关于此 Nana 演示代码中使用的 C++ 功能是啥?的主要内容,如果未能解决你的问题,请参考以下文章
是否像在 MFC 中那样在 nana c++ 中的画布上涂鸦的图形支持?