C ++容器类类型转换

时间:2010-07-15 07:04:50

标签: c++ containers

说,我得到了

Set<DerivedClass*> set1;

我得到了

Set<BaseClass*> set2;

我该怎么做?

Set<BaseClass*> set3 = set1.substract(set2); //static cast!

4 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

使用

http://www.boost.org/doc/libs/1_43_0/libs/range/doc/html/range/reference/algorithms/set/set_difference.html

但是,您必须使用第二个并提供自己的二元谓词。默认谓词运算符&lt; 将比较指针。你可能想要做的就是比较 值因此需要提供自己的谓词。

答案 2 :(得分:0)

您可以创建类似static_pointer_cast的内容。即你需要一个可以从一个static_cast专业化到另一个专业化的Set的独立模板。

答案 3 :(得分:0)

如果你想将set2转换为与set1相同的类型,我强烈建议你不要。只要substract不修改其参数,你就可以使用reinterpret_cast,但这是非常坏主意。

你真正需要的是一个非成员函数,正如Dave18所说,你可能想要std :: set_difference函数 - 除了你会遇到迭代器类型不匹配的问题。

一个解决方案就是开发自己的“适配器”迭代器类,它主要将调用传递给原始迭代器,但是当解除引用时会执行所需的转换。

比编写自己的迭代器适配器更好的是重用别人。我认为boost::iterator_adaptor看起来很可能是候选人,但我还没有正确检查。