【发布时间】:2016-06-14 10:54:27
【问题描述】:
我确实在网上搜索过这个问题,但从未找到答案。我知道初始化类的两种方法,当我尝试传递函数时,其中一种方法不起作用。你能帮我理解为什么会这样吗?我应该使用什么方法?提前致谢!
void func(int i){
cout << "GG " << i;
}
class ac{
public:
int a;
function<void()> sh = bind(&func, a);
/*ac (int i){ This does not work
a = i;
}*/
ac (int i) : a(i) {}; // but this does
void go (){
sh();
}
};
int main() {
ac ac1(5);
ac1.go();
return 0;
}
编辑:感谢所有回复,这比我想象的要快得多。第一个示例的输出似乎是一些随机垃圾,我不确定这就是为什么我犹豫要详细说明输出的原因。
【问题讨论】:
-
您可以通过将“不起作用”替换为实际的问题描述来大大改善这个问题。
-
欢迎来到 StackOverflow。正如@ChristianHackl 所说,“不起作用”并不能帮助您问题的读者弄清楚您所看到的您认为不正确的行为。描述你认为应该发生的事情和实际发生的事情。为了让读者理解问题,您还应该发布足够完整的代码以实际编译和运行并显示问题。不要让人猜测代码有什么
#include指令。 -
对不起,我故意说“不起作用”,因为我不确定输出是否是一些随机值或某物的地址。但是明白了你的意思:D
-
如果您不打算更改
std::function成员,那么我建议您将其替换为成员函数。十分简单。 :) -
实际上我的意图是将带有任意数量参数的函数传递给类。我以为我可以为此使用绑定,但即使使用上面的硬编码版本,我也会遇到错误。此外,如果没有硬编码功能,我仍然无法完成工作。如何将要绑定的函数的名称传递到类中?
标签: c++ function class pointers initialization