我正在尝试将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中仍然不起作用。
答案 0 :(得分:3)
std::function
需要接受指向成员函数的指针( INVOKE
的定义)。
最简单的解决方法是使用std::mem_fn
代替,或者使用std::mem_fn
包装构造函数参数:
std::function<void(const Foo&, int)> fun = std::mem_fn(&Foo::bar);