class BaseA
{
}
class B : public BaseA
{
}
template <class T>
class C : public vector<T>
{
}
void someFunction (void)
{
C<B> myClass;
// I can't seem to do this...is it not possible?
vector<BaseA> converted = ((vector<BaseA>) myClass);
}
在代码中查看我正在尝试做的事情。
答案 0 :(得分:12)
B的向量不是A的向量,即使B是A(我假设A和BaseA之间的混合)
尝试
vector<A> converted(myClass.begin(), myClass.end());
这可能就是你想要表达的内容。
(BTW继承自矢量is bad idea in general,它不是为此而设计的。)
答案 1 :(得分:3)
C<B>
和vector<A>
是完全不相关的类型,您必须明确定义此类转化(例如template <typename TargetValueType> explicit operator vector<TargetValueType> () { ... }
)。
如果这种转换是一种不常见的任务,对于你的类的本质来说并不是很自然,那么最好使用范围构造函数(参见AProgrammer的答案)。
另外:如果vector
是std::vector
,那么从中得出并不是一个好主意。它没有被定义为基类,通常你应该更喜欢包含而不是派生(因为它会对你的客户端施加更宽松的耦合)。
答案 2 :(得分:0)
没有办法没办法。想象一下,如果你有另一个来自X
的课程BaseA
。如果您可以获取converted
对象,则可以在其中插入X
的实例,即使原始对象不允许它。你打破了变量的语义。
顺便说一下,可以在Java中执行此操作,因为它们没有真正的泛型,但是在C#或C ++等强类型泛型语言中,您无法做到(使用C#中的一个例外,但无论如何你不应该在这种情况下使用它。)