VS2013 std :: function与成员函数

时间:2014-05-21 09:15:17

标签: c++ visual-studio-2013 std-function member-functions

我正在尝试将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 个答案:

答案 0 :(得分:3)

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

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

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