#define WIRED\
[]() {\
return new MyClass; \
}()
MyClass* a = WIRED;
我不理解MACRO中的第一个[]()
和最后一个()
。任何专家都能解释一下吗?感谢。
答案 0 :(得分:4)
这是一个lambda返回一个动态分配MyClass
,它是在适当的位置创建和执行的。
具体做法是:
[](){...}
是lambda;剩下的()
是lambda的调用。
这是一个无用的lambda AFAIK,您只需写下:
MyClass* a = new MyClass;
或更好:
std::unique_ptr<MyClass> ptr(new MyClass);
答案 1 :(得分:2)
您可能需要了解C ++ 11中的lambda函数。
我相信你能理解这一点:
MyClass* CreateMyClass() { return new MyClass; }
...
std::function<MyClass* ()> creator_function = CreateMyClass;
MyClass* a = creator_function();
然后,lambda函数看起来像:
std::function<MyClass* ()> creator_function = []() { return new MyClass; };
MyClass* a = creator_function();
最后,这也可行:
MyClass* a = []() { return new MyClass; }();