std::vector<std::vector<warrior*>> warriors;其中warrior是基类,数组中每个元素存放的是不同的派生类,如何确定每个派生类是哪种,一共有五种派生类,能否简单判断
时间: 2024-02-17 08:01:18 浏览: 68
如果有固定的派生类数量,可以使用 `typeid` 运算符来判断每个派生类的类型。`typeid` 运算符返回一个 `std::type_info` 类型的对象,可以使用 `type_info::name()` 成员函数获取类型的名称。
例如,在上面的代码中,如果我们有五种派生类,可以使用 `typeid` 运算符来判断每个派生类的类型,示例如下:
```C++
for (int i = 0; i < 5; ++i) {
for (int j = 0; j < 10; ++j) {
warrior* w = warriors[i][j];
if (w != nullptr) {
if (typeid(*w) == typeid(warriorA)) {
// w 是 warriorA 类型
} else if (typeid(*w) == typeid(warriorB)) {
// w 是 warriorB 类型
} else if (typeid(*w) == typeid(warriorC)) {
// w 是 warriorC 类型
} else if (typeid(*w) == typeid(warriorD)) {
// w 是 warriorD 类型
} else if (typeid(*w) == typeid(warriorE)) {
// w 是 warriorE 类型
} else {
// w 是其他类型
}
}
}
}
```
在上述代码中,我们首先将 `warriors[i][j]` 赋值给 `w`,然后使用 `typeid` 运算符获取 `w` 的类型信息,并与各个派生类的类型信息进行比较,判断 `w` 是哪种派生类类型。需要注意的是,`typeid` 运算符返回的是 `std::type_info` 类型的对象,需要使用 `==` 运算符进行比较,而不能使用 `=` 进行赋值。
阅读全文