绑定一个被重载的函数的企图通常对导致一个错误,因为无法表示到底要绑定哪一个重载版本。对于带有 const 和非 const 两个重载的成员函数来说,这是一个很常见的问题,就像这个简化的示例:
struct X
{
int& get();
int const& get() const;
};
int main()
{
boost::bind( &X::get, _1 );
}
这里的二义性可以通过将(成员)函数指针强制转换到想要的类型来解决:
int main()
{
boost::bind( static_cast< int const& (X::*) () const >( &X::get ), _1 );
}
另一个或许更可读的办法是引入一个临时变量:
int main()
{
int const& (X::*get) () const = &X::get;
boost::bind( get, _1 );
}
参考:http://cpp.ezbty.org/myfiles/boost/libs/bind/bind.html#err_overloaded