c++使用function和bind绑定类成员函数时不能有重载函数

一、背景

最近在编写一个项目的代码时,不小心犯了一个错误, 导致项目代码编译不过,项目使用的语言是c++,一直报’bind(,xxxx)这类似的错误,开始以为是基础基类的方法有问题,但查看代码之后发现,我们要bind的成员函数,不是虚函数,也没有继承基类的函数,搞了好半天才发现问题所在。

二、问题解决

最终的问题,是因为此类中,内部使用(protected或private)的函数重载了我们需要绑定的成员函数,比如一个函数为

class Foo
{
public:
    void foo(int arg1, char* arrg2);
};

如果我们再增加一个重载函数

class Foo
{
public:
    void foo(int arg1, char* arrg2);
    void foo(char* arg1, float arg2);
};

此时,如果我们要绑定Foo类的成员函数

typedef std::function<void(int, char*)> myFunc;
Foo temp;
myFunc = std::bind(Foo::foo, &temp, std::placeholders::_1,std::placeholders::_2); 

这样就会报错,因为std::bind不知道应该去绑定哪一个foo成员函数。

所以: 在使用std::bind绑定类成员函数时,一定要注意,不能有要绑定成员函数的重载成员函数

猜你喜欢

转载自blog.csdn.net/xuanwolanxue/article/details/81162010
今日推荐