私は class を持っておりA
、それはクラスによって拡張されていB
ます。それから私はクラス Ptr を持っています - 一種のスマートポインタです。に静的にキャストPtr<A>
する必要がありPtr<B>
ます。
そして常にコンパイラは私に与えます:
Ptr<A>
エラー: 型から型へのstatic_cast が無効ですPtr<B>
私は class を持っておりA
、それはクラスによって拡張されていB
ます。それから私はクラス Ptr を持っています - 一種のスマートポインタです。に静的にキャストPtr<A>
する必要がありPtr<B>
ます。
そして常にコンパイラは私に与えます:
Ptr<A>
エラー: 型から型へのstatic_cast が無効ですPtr<B>
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>(/* ...? */);
}
// ...
};
ただし、これを行うのではなく、やりたいことを行う他の方法を見つけることをお勧めします。
これは不可能です。A は B から派生していますPtr<A>
が、完全に別の型です。Ptr<B>