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);