-4

我有 class A,它是按B类扩展的。然后我有类 Ptr - 一种智能指针。我需要静态Ptr<A>转换为Ptr<B>.

编译器一直给我:

错误:从类型Ptr<A>到类型的static_cast 无效Ptr<B>

4

2 回答 2

2

Ptr<A>Ptr<B>是从同一个类 template 实例化的Ptr,它们的模板参数AB是相关的,并不意味着您可以隐式转换 fromPtr<A>Ptr<B>/或 back。

您必须创建自己的转换运算符:

template <typename T1>
struct Ptr
{
   // ...

   template <typename T2>
   operator Ptr<T2>()
   {
      return Ptr<T2>(/* ...? */);
   }

   // ...
};

但是,我真的建议您不要这样做,并找到其他方法来做您想做的事情。

于 2013-11-04T14:38:17.340 回答
1

这是不可能的。Ptr<A>完全是另一种类型,Ptr<B>即使 A 是从 B 派生的。

于 2013-11-04T12:29:57.350 回答