Различают const и неконстантный метод с одинаковым именем в boost::bind
Когда я использую boost::bind
с именем метода, который объявлен как const, так и non-const, я получаю неоднозначную ошибку, например
boost::bind( &boost::optional<T>::get, _1 )
Как я могу решить эту проблему?
1 ответ
Решение
Проблема вместе с обходными путями описана в разделе часто задаваемых вопросов в 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 );
}