有人可以解释这段代码吗?
struct Class {
boost::function<void()> member;
};
Class c;
boost::function<boost::function<void()>()> foo = boost::bind(&Class::member, &c);
boost::function<void()> bar = boost::bind(&Class::member, &c);
为什么bar
的定义会编译,结果是什么?
修改:foo()
按预期工作,调用c.member()
,但bar()
没有。
答案 0 :(得分:0)
如果您的班级是这样的话,您需要绑定:
class Class {
public:
void member();
};
然后你想要做的是:
Class c;
boost::function<void()> the_function_i_want_to_call = boost::bind(&Class::member, c);
the_function_i_want_to_call.call();
答案 1 :(得分:0)
第一个调用用于“生成”一个提取器仿函数。该函数在被调用时将返回它所绑定的成员。
第二个调用只隐藏传入的仿函数的返回类型(与第一个示例中的相同)。基本上,调用bar
将不会做任何事情。