将模板转换为子模板

时间:2013-11-04 12:23:30

标签: c++

我有班级A,并且由B班级扩展。 然后我有类Ptr - 一种智能指针。 我需要将Ptr<A>静态转换为Ptr<B>

以及编译器给我的所有时间:

错误:从Ptr<A>类型到Ptr<B>

类型的static_cast无效

2 个答案:

答案 0 :(得分:2)

Ptr<A>Ptr<B>是从同一个类模板Ptr实例化的,其模板参数AB是相关的,并不代表您可以隐式地从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派生的。