-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それらのテンプレート引数Aとは関連していますが、暗黙的に からへ、および/またはその逆にB変換できるという意味ではありません。Ptr<A>Ptr<B>

独自の変換演算子を作成する必要があります。

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

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

   // ...
};

ただし、これを行うのではなく、やりたいことを行う他の方法を見つけることをお勧めします。

于 2013-11-04T14:38:17.340 に答える
1

これは不可能です。A は B から派生していますPtr<A>が、完全に別の型です。Ptr<B>

于 2013-11-04T12:29:57.350 に答える