我正在尝试创建一个 boost::function 允许设置对象的成员变量。我创建了一个我能想到的最简单的例子来了解我正在尝试(和失败)做的事情。我觉得我掌握了 boost::bind,但我是 boost 的新手,我相信我错误地使用了 boost::function。
#include <iostream>
#include <Boost/bind.hpp>
#include <boost/function.hpp>
class Foo
{
public:
Foo() : value(0) {}
boost::function<void (int&)> getFcn()
{
return boost::function<void (int&)>( boost::bind<void>( Foo::value, this, _1 ) );
}
int getValue() const { return value; }
private:
int value;
};
int main(int argc, const char * argv[])
{
Foo foo;
std::cout << "Value before: " << foo.getValue();
boost::function<void (int&)> setter = foo.getFcn();
setter(10); // ERROR: No matching function for call to object of type 'boost::function<void (int &)>'
// and in bind.hpp: Called object type 'int' is not a function or function pointer
std::cout << "Value after: " << foo.getValue();
return 0;
}
我在第 28 行遇到错误,我想使用该函数将 Foo::value 设置为 10。我只是在处理这整件事错了吗?我应该只传回一个 int* 或其他东西,而不是使用 boost 来完成所有这些吗?我之所以调用“getFcn()”是因为在我的实际项目中我使用的是消息传递系统,如果包含我想要的数据的对象不再存在,getFcn 将返回一个空的 boost::function。但我想如果没有找到任何东西,我可以使用 int* 返回 NULL。