我有以下代码
#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_)();
~~~~~~~^~
我对错误的来源感到困惑,无论它最初是来 self 的代码还是来自 boost 库。有谁知道错误的含义以及如何解决?我使用 g++ (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0 和 boost.1.60
最佳答案
当绑定(bind)到一个成员函数时,第一个参数需要是一个指针或一个引用来调用该函数的对象。它特别不能是一个值(一个实际的对象实例)。 boost::bind
函数为这两个替代方案提供特殊情况以生成正确的对象。它没有任何按值传递的特殊情况。
因此,您需要将 getIntFoo
定义为一个函数,该函数接受指向 Foo
的指针:
boost::function<int (Foo*)> getIntFoo;
或引用:
boost::function<int (Foo&)> getIntFoo;
关于c++ - boost 函数绑定(bind)编译时出现转换错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53281788/