我使用boost::ptr_vector <类A>,我也用它来存储类B的对象:public类A,我希望能够访问向量中的类B对象;我怎样才能获得访问权限?类A>
理想情况下,A
应该提供一个虚拟接口,允许您访问B
中所需的部分。如果您需要访问实际的B
对象,则需要在迭代器对容器产生的引用上使用dynamic_cast
(如果您确定迭代器实际上指向B
对象,则可以使用static_cast
):
// 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的transform_iterator
(将每个A&
转换为B&
)和filter_iterator
(跳过容器中的任何非B
元素)的组合。