gpt4 book ai didi

c++ - 如何检查派生类的类型? (C++ Instanceof)

转载 作者:行者123 更新时间:2023-12-01 15:13:30 24 4
gpt4 key购买 nike

假设我有一些基础抽象类和三个派生和实现其方法的不同类。是否像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;
}
}

该对象的类型均为 ModuleBaseModule1。我认为您可以通过这些实现您所需要的。

关于c++ - 如何检查派生类的类型? (C++ Instanceof),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60066535/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com