如何在C++中将函数用作变量

4

我希望为我的需求创建一个C++事件系统。

我知道你可以将函数用作其他函数参数。

也许我错过了什么(但在C#中,您可以使用事件处理程序实现它)。


2
也许你会对 https://www.cprogramming.com/tutorial/function-pointers.html 感兴趣。 - minterm
4
这是一个广泛的问题。您是否尝试过任何教科书?在线教程?http://en.cppreference.com/w/cpp/language/pointer - R Sahu
4
了解闭包、Lambda表达式和函数对象。阅读SICP然后阅读一本好的C++编程书籍。 - Basile Starynkevitch
您可以使用std::function轻松将函数传递到其他函数中,但从设计角度来看,您可能需要使用观察者模式。 - Ap31
2个回答

9

你可以将它存储在指针中。 例如:

void func(int a) { ... }
void (*ptr)(int) = &func;
(*ptr)(5); // call the function with value 5

ptr是一个指针,它的值是一个具有一个“int”参数和“void”返回类型的函数的内存。


5
在C++11中,lambda表达式变得更加相关。 - Basile Starynkevitch
1
std::function 对象更加容易。 - Jesper Juhl
@JesperJuhl,我需要包含哪个文件? - Metal Cat
1
@Metal Cat - <functional>。正如文档所示,很容易看出。 - Jesper Juhl

2
您可以使用“观察者模式”(另请参阅UML):
每个事件监听器都必须派生自一个抽象类(Observer),其中包含事件方法。您可以在这样的派生类中实现特定的事件监听器代码。一个Subject类包含所有事件监听器对象(一个抽象类Observer的向量),并在事件发生时通知它们。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接