强制转换std :: vector的所有成员

时间:2016-04-22 10:51:22

标签: c++ c++11 casting

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,是什么?

1 个答案:

答案 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

Live Demo

相关问题