【发布时间】:2012-02-29 11:40:09
【问题描述】:
我想创建一个类,客户端可以在其中存储像 []() -> void {} 这样的 lambda 表达式作为类的字段,但我不知道该怎么做。 One answer suggested using decltype,我试过但没有成功。这是ideone source link。以下是出处和结果:
#include <cstdio>
auto voidLambda = []()->void{};
class MyClass {
public:
decltype(voidLambda) t;
MyClass(decltype(voidLambda) t) {
this->t = t;
}
};
int main() {
MyClass([] {
printf("hi");
});
}
结果:
prog.cpp: In constructor 'MyClass::MyClass(<lambda()>)':
prog.cpp:3:79: error: no matching function for call to '<lambda()>::__lambda0()'
prog.cpp:2:20: note: candidates are: <lambda()>::<lambda>(const<lambda()>&)
prog.cpp:2:20: note: <lambda()>::<lambda>(<lambda()>&&)
prog.cpp:3:88: error: no match for 'operator=' in '((MyClass*)this)->MyClass::t = t'
prog.cpp: In function 'int main()':
prog.cpp:5:27: error: no matching function for call to 'MyClass::MyClass(main()::<lambda()>)'
prog.cpp:3:48: note: candidates are: MyClass::MyClass(<lambda()>)
prog.cpp:3:14: note: MyClass::MyClass(const MyClass&)
有人知道怎么做吗?
【问题讨论】:
-
每个 lambda 表达式都会创建自己独特的类型。在
auto A = [](){}; auto B = [](){};A和B不是同一个类型。 -
很遗憾,
struct A { auto x = 0; };是不允许的。
标签: c++ class lambda c++11 field