相关疑难解决方法(0)

如何将lambda表达式存储为C++ 11中的类的字段?

我想创建一个类,其中客户端可以存储lambda表达式,如类[]() -> void {}的字段,但我无法弄清楚如何这样做. 一个答案建议使用decltype,我尝试没有成功.这是一个ideone源链接.以下是来源和结果:

#include <cstdio>
auto voidLambda = []()->void{};

class MyClass {
public:
     decltype(voidLambda) t;
     MyClass(decltype(voidLambda) t) { 
        this->t = t;
     }
};

int main() {
   MyClass([] {
      printf("hi");
   });
}
Run Code Online (Sandbox Code Playgroud)

结果:

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 …
Run Code Online (Sandbox Code Playgroud)

c++ lambda field class c++11

46
推荐指数
2
解决办法
2万
查看次数

标签 统计

c++ ×1

c++11 ×1

class ×1

field ×1

lambda ×1