事件处理继承(C++)

event handling inheritance (C++)

本文关键字:C++ 继承 事件处理      更新时间:2023-10-16

我正在重新设计现有代码(在C++中)如何处理事件(与数据相关)。要处理的事件是与DataTable相关的事件和与XmlNode相关的事件。

我想创建一个带有虚拟函数的通用超类(称为EventManager),以便在整个应用程序中提供一致性。

我计划在EventManager中具有以下虚拟功能:

DataChanged(EventArgs arg)
DataChanging(EventArgs arg)
DataInserted(EventArgs arg)
DataInserting(EventArgs arg)
DataRemoved(EventArgs arg)
DataRemoving(EventArgs arg)

我使用了EventArgs作为参数,因为其他(XmlNodeChangeEventArgs, DataRowChangeEventArgs, DataColumnChangeEventArgs)都是从它派生的。但如果在虚拟函数中使用它,我将丢失派生事件参数所特有的信息。

我的问题是,我应该如何设计/处理这个超级类和虚拟函数,以便拥有一个管理事件的通用类,但仍然可以正确地映射(包含所需的所有信息)到派生类?

我尽力解释了我的情况,但请随时提问以澄清问题。我真的在寻找深思熟虑的答案,所以我愿意改进我的问题!

提前感谢您的时间和耐心!:)

  1. 通过reference传递参数,通过值传递只会增加额外的开销。

  2. 但是在虚拟函数中使用它,我将丢失派生事件args特有的信息

您可以使用dynamic_cast并检查下变频的有效性,不会丢失任何信息。

除了通过引用而不是通过值传递所有事件(这会对它们进行切片,这样你甚至不能向下转换它们)之外,我还想定义一些更抽象的方式来查看事件,这样传递对基类的引用就不会阻碍你访问派生类中定义的所有功能。

我不知道这是否可能,但你可以让EventArgs类成为一个虚拟基类,公开一个足够通用的接口,以承载派生类中可能需要的所有内容。

如果你指定了更多关于你为活动设想的操作和行为的信息,我可以尝试提供更详细的建议。