2010-07-15 100 views
1

说,我得到了C++容器类类型转换

Set<DerivedClass*> set1; 

我得到了

Set<BaseClass*> set2; 

我如何做到这一点?

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

'substract'是如何声明的? – 2010-07-15 07:11:42

+0

设置和减(const的设置及其他) – 2010-07-15 07:16:15

+0

什么是“设置”类? – adf88 2010-07-15 08:04:57

回答

0

你可以像static_pointer_cast创造的东西。即您需要一个可以执行static_cast从一个Set专业化到另一个的独立模板。

0

如果你想投SET2同一类型的设置1,我强烈建议你不这样做。你可能会逃脱一个的reinterpret_cast,只要不。减去不修改其参数,但它是一个非常坏主意。

你真正需要的是一个非成员函数和,作为Dave18说,你可能想在std :: set_difference功能 - 除了你就会有不匹配的迭代器类型的问题。

一个解决方案是开发自己的“适配器”迭代器类,它主要是通过原来的迭代器通过电话,但提领时确实需要的演员。

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