假设我有一些基础抽象类和三个派生和实现其方法的不同类。是否像C#中那样有一个“类型”对象?换句话说,如何获得所有这些类的实例?
#ModuleBase.cpp
class ModuleBase {
};
#Module1.cpp
class Module1 : public virtual ModuleBase {
};
#Module2.cpp
class Module2 : public virtual ModuleBase {
};
#Module3.cpp
class Module3 : public virtual ModuleBase {
};
最佳答案
您可以创建类似于instanceof
的方法,这些方法可以使用模板和 std::is_base_of
(1)或 dynamic_cast
仅用于多态对象(2)来检测对象的类型。
1 Live sample
template<typename Base, typename T> inline bool instanceof(const T) {
return is_base_of<Base, T>::value;
}
int main() {
Module1 module;
if(instanceof<Module1>(module)) {
cout << "Module1" << endl;
}
if(instanceof<Module2>(module)) {
cout << "Module2" << endl;
}
if(instanceof<ModuleBase>(module)) {
cout << "ModuleBase" << endl;
}
}
2 Live sample
class ModuleBase { public: virtual ~ModuleBase(){} };
template<typename T> inline bool instanceof(const ModuleBase * base) {
return dynamic_cast<const T*>(base);
}
int main() {
Module1* module = new Module1();
if(instanceof<Module1>(module)) {
cout << "Module1" << endl;
}
if(instanceof<Module2>(module)) {
cout << "Module2" << endl;
}
if(instanceof<ModuleBase>(module)) {
cout << "ModuleBase" << endl;
}
}
该对象的类型均为
ModuleBase
和Module1
。我认为您可以通过这些实现您所需要的。
关于c++ - 如何检查派生类的类型? (C++ Instanceof),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60066535/