如果我有一个指向父类的指针向量,并且这个向量是通过实例化从父类派生的对象来初始化的,那么似乎我不能使用范围 for 循环以便获取导出对象作为元素。以下是一个简单的示例:
但是在C++11中,这是最干净的方法吗?还有其他替代方案吗?
#include <vector>
class Parent {};
class Derived : public Parent {};
int main()
{
std::vector<Parent*> objects { new Derived(), new Derived() };
for (Derived* d : objects) { // ERROR
// Use d
}
return 0;
}
有没有一种简洁的方式可以做到我想要的(即,遍历派生对象)?我知道可以像这样做:
for (Parent* p : objects) {
Derived* d = static_cast<Derived*>(p);
// Use d
}
但是在C++11中,这是最干净的方法吗?还有其他替代方案吗?
Derived*
,为什么一开始不使用vector<Derived*>
呢?如果你不确定,那么你的转换有什么用处(无论是显式转换还是在循环中以某种神奇的方式隐式转换)? - Igor Tandetnik