VS2013 std::function с функцией-членом

Я пытаюсь использовать std:: function с функциями-членами, как это:

struct Foo
{
   void bar(int) const { /* ... */ }
};

//later on
std::function<void(const Foo&, int)> fun = &Foo::bar;

Это работает в GCC 4.8.1, но не компилируется в VS2013 со следующей ошибкой:

error C2664: 'void std::_Func_class<_Ret,const Foo &,int>::_Set(std::_Func_base<_Ret,const Foo &,int> *)' :
cannot convert argument 1 from '_Myimpl *' to 'std::_Func_base<_Ret,const Foo &,int> *'

Это выглядит как ошибка в VS, но, может быть, я что-то не вижу? Есть ли способ обойти это (без внешних библиотек вроде boost)?

Изменить: я забыл "const" в баре подписи. Но это все еще не работает в VS.

1 ответ

Решение

std::function требуется принять указатели на функции-члены (определение INVOKE).

Самый простой обходной путь заключается в использовании std::mem_fn вместо этого, или оберните аргумент конструктора std::mem_fn:

std::function<void(const Foo&, int)> fun = std::mem_fn(&Foo::bar);
Другие вопросы по тегам