我有班级A
,并且由B
班级扩展。
然后我有类Ptr - 一种智能指针。
我需要将Ptr<A>
静态转换为Ptr<B>
。
以及编译器给我的所有时间:
错误:从Ptr<A>
类型到Ptr<B>
答案 0 :(得分:2)
Ptr<A>
和Ptr<B>
是从同一个类模板Ptr
实例化的,其模板参数A
和B
是相关的,并不代表您可以隐式地从Ptr<A>
转换为Ptr<B>
和/或返回。
您必须创建自己的转换运算符:
template <typename T1>
struct Ptr
{
// ...
template <typename T2>
operator Ptr<T2>()
{
return Ptr<T2>(/* ...? */);
}
// ...
};
但是,我真的建议你不要这样做,并找到其他方法来做你想做的事。
答案 1 :(得分:1)
这是不可能的。 Ptr<A>
完全是另一种类型,然后是Ptr<B>
,即使A是从B派生的。