gpt4 book ai didi

c++ - boost 函数绑定(bind)编译时出现转换错误

转载 作者:行者123 更新时间:2023-11-30 01:35:46 25 4
gpt4 key购买 nike

我有以下代码

#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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com