0

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

4

1 回答 1

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 的组合transform_iterator(将每个元素转换A&为 a B&)和filter_iterator(跳过任何非B元素容器)。

于 2011-04-30T00:02:07.800 回答