我有以下代码
#include <boost/function.hpp>
#include <boost/bind.hpp>
class Foo {
public:
int getIfoo();
};
int Foo::getIfoo() {
return 5;
}
int main () {
boost::function<int (Foo)> getIntFoo;
getIntFoo = boost::bind( &Foo::getIfoo, _1 );
return 0;
}
当我使用以下命令g++ TestBoostBind.cpp
进行编译时,出现以下错误
/includes/boost_1_60_0/boost/bind/mem_fn_template.hpp:35:36: error: invalid conversion from ‘const Foo*’ to ‘Foo*’ [-fpermissive]
BOOST_MEM_FN_RETURN (u.*f_)();
~~~~~~~^~
我对错误的来源感到困惑,无论它是最初来自我的代码还是来自boost库。有谁知道错误的含义以及如何解决?我使用g ++(Ubuntu 7.3.0-27ubuntu1〜18.04)7.3.0和boost.1.60
答案 0 :(得分:4)
绑定到成员函数时,第一个参数必须是对象的 pointer 或 reference ,以调用该函数。具体来说,它不能是值(实际的对象实例)。 boost::bind
函数在这两种选择中都有特殊情况,以生成正确的对象。 不没有任何特殊情况可以按值传递。
因此,您需要将getIntFoo
定义为将 pointer 指向Foo
的函数:
boost::function<int (Foo*)> getIntFoo;
或参考:
boost::function<int (Foo&)> getIntFoo;
答案 1 :(得分:0)
您可以尝试使用std::mem_fn
来实现相同的目标:
Foo f;
std::function<int(Foo &)> getIntFoo = std::mem_fn(&Foo::getIfoo);
int ret = getIntFoo(f);
或者如果您需要指针参数,则std :: function可以为您解决此问题:
Foo f;
std::function<int(Foo *)> getIntFoo = std::mem_fn(&Foo::getIfoo);
int ret = getIntFoo(&f);
有自己的选择