说,我得到了
Set<DerivedClass*> set1;
我得到了
Set<BaseClass*> set2;
我该怎么做?
Set<BaseClass*> set3 = set1.substract(set2); //static cast!
答案 0 :(得分:1)
答案 1 :(得分:1)
使用
但是,您必须使用第二个并提供自己的二元谓词。默认谓词运算符&lt; 将比较指针。你可能想要做的就是比较 值因此需要提供自己的谓词。
答案 2 :(得分:0)
您可以创建类似static_pointer_cast
的内容。即你需要一个可以从一个static_cast
专业化到另一个专业化的Set
的独立模板。
答案 3 :(得分:0)
如果你想将set2转换为与set1相同的类型,我强烈建议你不要。只要substract不修改其参数,你就可以使用reinterpret_cast,但这是非常坏主意。
你真正需要的是一个非成员函数,正如Dave18所说,你可能想要std :: set_difference函数 - 除了你会遇到迭代器类型不匹配的问题。
一个解决方案就是开发自己的“适配器”迭代器类,它主要将调用传递给原始迭代器,但是当解除引用时会执行所需的转换。
比编写自己的迭代器适配器更好的是重用别人。我认为boost::iterator_adaptor看起来很可能是候选人,但我还没有正确检查。