Различают const и неконстантный метод с одинаковым именем в boost :: bind - PullRequest
5 голосов
/ 14 февраля 2010

Когда я использую boost::bind с именем метода, которое объявлено как const и non-const, я получаю неоднозначную ошибку, например

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

Как я могу решить эту проблему?

1 Ответ

6 голосов
/ 14 февраля 2010

Проблема вместе с обходными путями описана в разделе часто задаваемых вопросов 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 );
}
...