在C++中确定DataTable事件的类型

dev*_*per 1 c++ datatable events inheritance

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

我有一个EventManager使用以下虚函数调用的超类:

DataChanged(EventArgs *arg)
DataChanging(EventArgs *arg)
DataInserted(EventArgs *arg)
DataInserting(EventArgs *arg)
DataRemoved(EventArgs *arg)
DataRemoving(EventArgs *arg)
Run Code Online (Sandbox Code Playgroud)

还有派生类DataTableManagerXmlNodeManager.

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

Chr*_*ung 5

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

DataRowChangeEventArgs* foo = dynamic_cast<DataRowChangeEventArgs*>(arg);
if (foo) {
    // is a DataRowChangeEventArgs
}
Run Code Online (Sandbox Code Playgroud)

当然,您也可以将其转换为一行:

if (DataRowChangeEventArgs* foo = dynamic_cast<DataRowChangeEventArgs*>(arg)) {
    // is a DataRowChangeEventArgs
}
Run Code Online (Sandbox Code Playgroud)

(如果你完全使用过C#,那么dynamic_cast指针就像asC#中的运算符一样- 如果合适,它会返回一个指向目标类型的指针,否则为null.)