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