我正在使用boost :: ptr_vector< A类> ,我也用它来存储B类对象:公共类A.我希望能够访问向量中的B类对象;如何投射以获取访问权限?
答案 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
元素)。