在boost :: bind中区分具有相同名称的const和非const方法

时间:2010-02-14 12:28:07

标签: c++ boost boost-bind

当我将boost::bind与声明为const和非const的方法名称一起使用时,我遇到了模糊错误,例如

boost::bind( &boost::optional<T>::get, _1 )

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:6)

问题与变通方法一起在Boost.Bind参考的常见问题部分中进行了描述。

您还可以使用以下实用程序功能:

#include <boost/bind.hpp>
#include <boost/optional.hpp>

template <class Ret, class Obj>
Ret (Obj::* const_getter(Ret (Obj::*p) () const)) () const
{
    return p;
}

template <class Ret, class Obj>
Ret (Obj::* nonconst_getter(Ret (Obj::*p)())) ()
{
    return p;
}

int main()
{
    boost::bind( const_getter(&boost::optional<int>::get), _1 );
    boost::bind( nonconst_getter(&boost::optional<int>::get), _1 );
}