在boost :: ptr_vector中访问派生对象

时间:2011-04-29 23:52:40

标签: c++ boost ptr-vector

我正在使用boost :: ptr_vector< A类> ,我也用它来存储B类对象:公共类A.我希望能够访问向量中的B类对象;如何投射以获取访问权限?

1 个答案:

答案 0 :(得分:0)

理想情况下,A应提供虚拟界面,允许您访问所需的B部分。如果您需要访问实际的B对象,则需要将迭代器产生的引用上的dynamic_cast放入容器中(如果您确定知道该问题,则可以使用static_cast迭代器实际指向B对象):

// Create a container and insert a new element into it:
boost::ptr_vector<A> s;
s.push_back(new B());

// Get a reference to that element we just inserted:
B& b_ref = dynamic_cast<B&>(*s.begin());

如果你想迭代容器中的所有B元素(并跳过任何非B元素),你可以使用Boost {{1}的组合轻松地做到这一点。 (将每个transform_iterator转换为A&)和B&(跳过容器中的任何非filter_iterator元素)。