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

标签 c++ boost bind

我有以下代码

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

相关文章:

c++ - 随机数生成器 - 不是每次都生成随机数

c++ - 如何检查模板类型是否是变体类型的类型之一?

C++ 异常处理指南

javascript - Google Closure 绑定(bind)/解决 this 关键字的问题

c++ - 使用 Variadic 模板的困难

javascript - 什么是正确的 Javascript 绑定(bind)语法?

c++ - 在通过引用传递给函数时取消引用指针时是否调用复制构造函数

c++ - 从文件加载信息时出现问题

c++ - Boost:从最短路径创建图

c++ - 如何使用现有的哈希整数来索引哈希表?