class A {};
class B : public A {};
std::vector<A*> v;
// populate the vector via library api
// now I need it cast to std::vector<B*>
投入整件事:
auto vv = reinterpret_cast< std::vector<B*>& >(v)
有没有办法避免不安全的演员 - std :: move,placement new,是什么?
答案 0 :(得分:2)
由于您不知道原始向量中的A
是否可以转换为B
s。然后你可以使用一个原始循环并检查dynamic_cast
每个元素是否可以转换为B
,从而只使用“安全”元素填充你的向量:
for(auto &&e : v) {
auto p = dynamic_cast<B*>(e);
if(p) vv.push_back(p);
}
或者,您可以使用以下模板将一系列任意A
转换为任意B
s的范围,而不必担心是否在A
的范围内无法转换为A
的{{1}}:
B