带有成员函数的VS2013 std::函数

VS2013 std::function with member function

本文关键字:函数 std VS2013 成员      更新时间:2023-10-16

我试图使用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> *'

它看起来像一个bug在VS,但也许我没有看到什么?是否有一种方法来解决它(没有外部lib如boost)?

编辑:我忘记了"const"在栏签名。但在vs

中仍然不起作用。

std::function需要接受指向成员函数的指针( INVOKE 的定义)。

最简单的解决方法是使用std::mem_fn代替,或者用std::mem_fn包装构造函数参数:

std::function<void(const Foo&, int)> fun = std::mem_fn(&Foo::bar);
相关文章: