事件处理继承(C++)
event handling inheritance (C++)
我正在重新设计现有代码(在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
)都是从它派生的。但如果在虚拟函数中使用它,我将丢失派生事件参数所特有的信息。
我的问题是,我应该如何设计/处理这个超级类和虚拟函数,以便拥有一个管理事件的通用类,但仍然可以正确地映射(包含所需的所有信息)到派生类?
我尽力解释了我的情况,但请随时提问以澄清问题。我真的在寻找深思熟虑的答案,所以我愿意改进我的问题!
提前感谢您的时间和耐心!:)
-
通过
reference
传递参数,通过值传递只会增加额外的开销。 -
但是在虚拟函数中使用它,我将丢失派生事件args特有的信息
您可以使用dynamic_cast
并检查下变频的有效性,不会丢失任何信息。
除了通过引用而不是通过值传递所有事件(这会对它们进行切片,这样你甚至不能向下转换它们)之外,我还想定义一些更抽象的方式来查看事件,这样传递对基类的引用就不会阻碍你访问派生类中定义的所有功能。
我不知道这是否可能,但你可以让EventArgs类成为一个虚拟基类,公开一个足够通用的接口,以承载派生类中可能需要的所有内容。
如果你指定了更多关于你为活动设想的操作和行为的信息,我可以尝试提供更详细的建议。
- 继承函数的重载解析
- 继承期间显示未知行为的子类
- 头文件-继承c++
- 为什么在保护模式下继承升级不起作用
- 通过继承类使用来自不同命名空间的运算符
- 子目录是否继承属性,例如add_definitions,include_directories和父Cmakelist.t
- 混合组合和继承的C++问题
- 继承:构造函数,初始化C++11中基类的类C数组成员
- 从类继承时,继承的类是否会通过父类重新定义继承的变量
- 公共与私人继承
- 如何创建从同一类继承的不同对象的向量
- 如何从另一个文件继承私有成员变量和公共函数
- 在模板基类中为继承类中的可选重写生成虚拟方法
- 带有继承的C++工厂
- 我应该避免多重实现继承吗
- C++继承更改成员
- 从具有默认值的部分指定模板类继承时发生SWIG错误,具有不带默认值的正向声明
- 关于C++中具有多重继承"this"指针的说明
- 尝试使用继承和模板实现CRTP.Visual Studio正在生成编译器错误
- 如何在QT Creator上将QWidget声明为继承类的对象