我刚刚开始使用 C++ 学习 wxWidgets,3.0 版。我注意到,wxWidgets 中的事件处理是由事件表完成的。但是一个教程也提到了 Connect()——实际上它只是说:“本教程将使用事件表,而不是 Connect()”。
我想知道,事件表和 Connect() 背后的哲学是什么?有什么区别,什么时候一个比另一个更合适...谢谢。
最佳答案
首先,不要使用被 Bind() 取代的 Connect()
哪一个在各个方面都更好。
其次,处理事件的静态(使用事件表)和动态(使用 Bind()
)方法都有效,您可以使用任何您喜欢的方法。就个人而言,我推荐使用 Bind()
因为
- 它更灵活:可用于将一个对象上的事件连接到任何其他对象,甚至是一个自由函数,或者在 C++11 中,a lambda .
- 它更安全并且可以捕获最常见的错误,例如在编译时使用错误的事件处理程序签名。
- 它是“动态的”,即您可以随时连接和断开处理程序。
事件表的主要优点是
- 它们稍微短一些,尤其是在 3.0 之前的版本中。
- 它们在文档、示例、教程等中更为常见,因为它们在
Bind()
方面领先 15 年。
但是它们使用起来比较笨拙,因为它们需要对对象进行子类化(从中派生新类)以便处理其中的非命令事件,并且它们不会在编译时检测所有错误,从而允许您编写代码编译正常但在运行时崩溃。
关于c++ - wxWidgets - 事件表与 Connect()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21654064/