c++ - 在 C++ 中确定数据表事件的类型

标签 c++ events inheritance datatable

我正在为事件处理创建一个继承模型(特别是DataTablesXmlNode)。

我有一个名为 EventManager 的父类(super class),它具有以下虚函数:

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

还有派生类 DataTableManagerXmlNodeManager

DataTable 事件参数各不相同(例如 DataRowChangeEventArgsDataColumnEventArgs)。如果事件 arg 被转换为参数的 EventArgs,我如何在派生类中确定原始类型一次,即我如何知道传递的参数是否最初是 DataRowChangeEventArgs 还是 DataColumnEventArgs

最佳答案

通常,您应该使用虚函数调用派生类功能。但是,如果您真的必须测试一个类型,请执行以下操作:

DataRowChangeEventArgs* foo = dynamic_cast<DataRowChangeEventArgs*>(arg);
if (foo) {
    // is a DataRowChangeEventArgs
}

当然,您也可以将其合并为一行:

if (DataRowChangeEventArgs* foo = dynamic_cast<DataRowChangeEventArgs*>(arg)) {
    // is a DataRowChangeEventArgs
}

(如果您完全使用过 C#,指针上的 dynamic_cast 非常类似于 C# 中的 as 运算符——它返回指向目标类型(如果适用),否则为空。)

关于c++ - 在 C++ 中确定数据表事件的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6205908/

相关文章:

c++ - 具有 O(1) 出队和 O(whatever) 入队的优先级队列

java - 在 TableView ScrollBar 上添加监听器

java - 我的 XML 输出应该是这样的吗?

Java:如何创建同步块(synchronized block)以及子类使用的同步块(synchronized block)

c++ - 沿轨迹体积获取 HU 值

c++ - 如何告诉 gcov 忽略不可命中的 C++ 代码行?

c# - 永远不会执行加载项事件

c# - 如何在 Windows 窗体应用程序中实现控件验证?

C++ 保留指向模板对象的指针集合,所有指针都派生自非模板类

c++ - 将字符转换为整数?