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



我使用boost::ptr_vector <类A>,我也用它来存储类B的对象:public类A,我希望能够访问向量中的类B对象;我怎样才能获得访问权限?

理想情况下,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元素)的组合。

相关内容

  • 没有找到相关文章

最新更新