0
4

3 に答える 3

2

別のコンストラクターを追加します。

template <typename U>
Container(Container<U> const & ref,
          typename std::enable_if<std::is_base_of<T, U>::value, int>::type = 0)
: obj_(ref.obj_)
{ }

型が実際に から派生しているenable_if場合にのみ、この新しいコンストラクター テンプレートがオーバーロードの解決に参加するようにするための部分を追加しました。UT

于 2012-08-14T14:33:51.513 に答える
1

Container<A>Container<B>全く別のクラスです。

あなたはaをにcontainer_cast<T>(U) 変換するようなものを持つことができますContainer<A>Container<B>

container_cast はContainer<T>、 を取り、obj_ Container<U>それをキャストすることによって別のものを構築obj_しますT*

于 2012-08-14T14:35:31.013 に答える
-1

コンテナを使用する代わりに、基本クラスにうまく変換できるイテレータペアを使用してください。問題を解決し、コードを一度にクリーンアップします。


編集:より多くの情報が与えられた後、私はこれに私の答えを変更します:

を使用しboost::shared_ptrます。

于 2012-08-14T14:37:28.940 に答える