bind 的使用缺陷

bind好像不能绑定一个多态函数

比如 

test()

test(int)

无论绑定任何一个都有问题

下面的内容试过,但是没有效果:

绑定一个被重载的函数的企图通常对导致一个错误,因为无法表示到底要绑定哪一个重载版本。对于带有 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 );
}
posted @ 2013-03-06 10:49  zaleilynn  阅读(326)  评论(0编辑  收藏  举报