一、背景
最近在编写一个项目的代码时,不小心犯了一个错误, 导致项目代码编译不过,项目使用的语言是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绑定类成员函数时,一定要注意,不能有要绑定成员函数的重载成员函数