【发布时间】:2016-02-18 00:36:13
【问题描述】:
我正在尝试将成员函数对象传递给成员对象,但在 VS 2013 中出现以下错误:
error C2664: 'void std::_Func_class<_Ret,>::_Set(std::_Func_base<_Ret,> *)' : cannot convert argument 1 from '_Myimpl *' to 'std::_Func_base<_Ret,> *'
代码如下:
#include <iostream>
#include <functional>
class Bar {
public:
Bar(){};
Bar(std::function<void(void)> funct_) : funct(funct_){}
void setFunct(std::function<void(void)> funct_){
funct = funct_;
}
void run(){
for (int k = 0; k < 10; k++)
funct();
};
std::function<void(void)> funct;
};
class Foo{
public:
Foo(){
bar.setFunct(&Foo::printSimpleFoo);
}
void printSimpleFoo(){
std::cout << "Hello World" << std::endl;
}
void start(){
bar.run();
}
private:
Bar bar;
};
int _tmain(int argc, _TCHAR* argv[])
{
Foo foo;
foo.start();
system("pause");
return 0;
}
所以我希望Bar 能够从其父对象中获取具有特定签名的任意函数,即void(void),并在其run() 成员函数中调用它(将由父对象的@ 调用987654326@成员函数)
我研究过类似的问题。许多人建议使用 std::mem_fn 但当我不清楚如何在此设置中使用它时(函数必须传递给不同的对象)。
【问题讨论】: