下面的代码显示了我要做的:
Member variable:
std::vector<DerivedClass*> myPointers;
Function:
std::vector<BaseClass*> GetMyPointers()
{
return SOMETHING_CAST<BaseClass*>(myPointers);
}
不存在这样的强制转换运算符,即使A从B继承,std::vector
也没有理由继承std::vector
。
@songyuanyoa的命题是返回一个新的std::vector
。这个想法是,每个派生的*
可以单独隐式强制转换为基类*
。
因此返回{myPointers.begin(),myPointers.end()};
生成一个新向量,其中每个元素都是从原始向量的同一个索引元素创建的。以某种方式等效于(但由于使用了范围构造函数(请参阅https://en.cppreference.com/w/cpp/container/vector/vector)而更聪明):
std::vector<BaseClasse*> baseV;
for (auto p : myPointers)
baseV.push_back(p); // implicit cast from derived to base
return baseV;