如果我有结构:
typedef struct Foo
{
std::function<bool()> func;
}Foo;
我有一个无效功能
void bar(){std::cout << "hey";}
我希望能够做到这一点:
Foo f;
f.func = bar // f.func == func(){std::cout << "hey"; return true;}
答案 0 :(得分:1)
第一件事是void bar() {}
的函数类型是void()
而不是bool()
,所以func应该是:
std::function<void()> func;
第二件事:目前还不清楚&#34; C ++如何为成员变量重载运算符&#34;手段。如果您想编译代码,那么上述更改就足够了。如果要调用void operator()() { func(); }
,则可以重载的运算符为f();
。
如果你想保留bool()
函数类型并且仍然可以调用void()
函数,那么你可以使用lambda,它将调用bar
并返回true:
f.func = [](){ bar(); return true;};