部分的なクラステンプレートの特殊化で継承を実装するにはどうすればよいですか?

ウィルヘルムエラスムス

何か小さなものが足りないと思います。T =任意のパラメーターを持つテンプレートクラスである実装のために、テンプレートクラスのコンストラクターを特殊化したいと思います。語彙が少しずれていたらごめんなさい。基本的に、ギザギザの2D配列を許可する必要があるため、があり、ArEl<ArEl<int>>すべての配列の長さを事前に初期化したいと思います。

using namespace std;

template <typename T>
class ArEl {
 public:
  ArEl(size_t size = 0)
      : rSize(size), rArray(rSize ? new T[rSize]() : nullptr) {}
  ArEl(const ArEl& other);
  virtual ~ArEl() { delete[] rArray; }
  void swap(ArEl& first, ArEl& second);
  void redim(size_t size);

 private:
  std::size_t rSize;
  T* rArray;
};

template <typename T, typename T1>
class ArEl<ArEl<T>> : public ArEl<T1>{
  ArEl(size_t size = 0);
};

編集:

このエラーが発生します:

error: template parameters not deducible in partial specialization:
 class ArEl<ArEl<T>> : public ArEl<T1>{
Xirema

オブジェクトを間違った方法で特殊化しています。

template<typename T, typename T1>提供する必要のあるデータ型が2つあることを意味しますが、テンプレートの特殊化に必要なのは、基になる配列のデータ型だけであることは明らかです。期待がArEl<ArEl<T>>専門的である場合、これ以上かかることはありません。

template<typename T>
class ArEl<ArEl<T>> {
    /*Blah Blah Blah*/
};

継承の必要はなく、2番目のデータ型も必要ありません。

ただし、追加します。そもそも、この専門分野の必要性は実際にはありません。スペシャライゼーションをまったく記述しない場合でも、次のコードはそのまま機能するはずです。

ArEl<ArEl<int>> dim2Array(50);
//I'm assuming ArEl will have a member size() function
for(size_t index = 0; index < dim2Array.size(); index++) {
    //I'm assuming ArEl will have an operator[] overload
    dim2Array[index].redim(30);
}
//dim2Array is now 50 int arrays, each of size 30.

あなたが意図している機能は、次のようなものであると想定しています。これには、上記で投稿したようなテンプレートの特殊化が必要です。

ArEl<ArEl<int>> dim2Array(50, 30);
//dim2Array is now 50 int arrays, each of size 30.

しかし、私があなたなら、実装をそのままにしてArEl、代わりにこの種の構文を処理するMatrix<T>クラス(またはおそらくMatrix<T, N>N次元の場合)を書くことに投資します(ArEl<T>ちなみに、ビルディングブロックとして使用して構築できます) 、特にあなたが専門分野を書くことにコミットしているとは思わないのでArEl<ArEl<ArEl<int>>>(そしてそうです、あなたがそれをしようとしている方法では、各レベルは独自の専門分野を必要とします)。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

既存のテンプレートクラスを新しいタイプに部分的に特殊化するにはどうすればよいですか?

分類Dev

クラステンプレートの非型パラメータを部分的に特殊化するにはどうすればよいですか?

分類Dev

定義とは別にvoidに部分的に特殊化されたテンプレートを実装するにはどうすればよいですか?

分類Dev

列挙値のクラステンプレートを部分的に特殊化するにはどうすればよいですか?

分類Dev

テンプレート化されていないクラスのテンプレート化されたメンバーメソッドを部分的に特殊化するにはどうすればよいですか?

分類Dev

パラメータパックと非型テンプレート値を使用して部分的なテンプレートの特殊化を実行するにはどうすればよいですか?

分類Dev

関数テンプレートの部分的な特殊化を回避するにはどうすればよいですか?

分類Dev

* .cppファイルにテンプレート特殊化メソッドを実装するにはどうすればよいですか?

分類Dev

クラステンプレートの特殊化を使用してエイリアステンプレートの特殊化を作成するにはどうすればよいですか?

分類Dev

クラステンプレートによって演算子関数タイプを特殊化するにはどうすればよいですか?

分類Dev

関数テンプレート(クラステンプレートのメンバー)を明示的に特殊化すると、「部分的な特殊化は許可されていません」というエラーが発生します。なぜですか?

分類Dev

std :: string用にテンプレートを特殊化するにはどうすればよいですか

分類Dev

関数テンプレートを「部分的に特殊化」できるように調整するにはどうすればよいですか?

分類Dev

STLコンテナであるテンプレートパラメータに基づいて、選択したメンバー関数の部分的な特殊化をシミュレートするにはどうすればよいですか?

分類Dev

関数テンプレートの特殊化を減らすにはどうすればよいですか?

分類Dev

テンプレートの特殊化が基本テンプレートの子クラスであるかどうかを確認するにはどうすればよいですか?

分類Dev

typename引数のないテンプレートを特殊化するにはどうすればよいですか?

分類Dev

完全に特殊化されたテンプレートクラスの定義の外でテンプレートメンバー関数を定義するにはどうすればよいですか?

分類Dev

完全に特殊化されたテンプレートクラスの定義の外でテンプレートメンバー関数を定義するにはどうすればよいですか?

分類Dev

クラスを特殊化する場合、異なる数のテンプレートパラメータを取得するにはどうすればよいですか?

分類Dev

別の部分的に特殊化されたテンプレートクラスから部分的に特殊化されたテンプレートクラスを継承する

分類Dev

C ++「新しい」タイプのテンプレートを特殊化するときに、コンストラクターパラメーターを事前定義するにはどうすればよいですか。

分類Dev

テンプレート化されたクラスの基本クラスに基づいてメンバー関数を特殊化するにはどうすればよいですか

分類Dev

派生クラスのメンバーテンプレートクラスの部分的なクラス内特殊化を実行することは合法ですか?

分類Dev

同じテンプレート関数で複数のタイプを特殊化するにはどうすればよいですか?

分類Dev

STLソートを使用して、テンプレートの特殊化を使用してカスタムクラスオブジェクトをソートするにはどうすればよいですか?

分類Dev

クラスにインターフェイスを実装し、別のクラスから継承させるにはどうすればよいですか?

分類Dev

関数テンプレートを部分的に特殊化する代わりに、どうすればよいですか?

分類Dev

非型テンプレートクラスを特殊化するために、宣言の外部でメソッドを定義するにはどうすればよいですか?

Related 関連記事

  1. 1

    既存のテンプレートクラスを新しいタイプに部分的に特殊化するにはどうすればよいですか?

  2. 2

    クラステンプレートの非型パラメータを部分的に特殊化するにはどうすればよいですか?

  3. 3

    定義とは別にvoidに部分的に特殊化されたテンプレートを実装するにはどうすればよいですか?

  4. 4

    列挙値のクラステンプレートを部分的に特殊化するにはどうすればよいですか?

  5. 5

    テンプレート化されていないクラスのテンプレート化されたメンバーメソッドを部分的に特殊化するにはどうすればよいですか?

  6. 6

    パラメータパックと非型テンプレート値を使用して部分的なテンプレートの特殊化を実行するにはどうすればよいですか?

  7. 7

    関数テンプレートの部分的な特殊化を回避するにはどうすればよいですか?

  8. 8

    * .cppファイルにテンプレート特殊化メソッドを実装するにはどうすればよいですか?

  9. 9

    クラステンプレートの特殊化を使用してエイリアステンプレートの特殊化を作成するにはどうすればよいですか?

  10. 10

    クラステンプレートによって演算子関数タイプを特殊化するにはどうすればよいですか?

  11. 11

    関数テンプレート(クラステンプレートのメンバー)を明示的に特殊化すると、「部分的な特殊化は許可されていません」というエラーが発生します。なぜですか?

  12. 12

    std :: string用にテンプレートを特殊化するにはどうすればよいですか

  13. 13

    関数テンプレートを「部分的に特殊化」できるように調整するにはどうすればよいですか?

  14. 14

    STLコンテナであるテンプレートパラメータに基づいて、選択したメンバー関数の部分的な特殊化をシミュレートするにはどうすればよいですか?

  15. 15

    関数テンプレートの特殊化を減らすにはどうすればよいですか?

  16. 16

    テンプレートの特殊化が基本テンプレートの子クラスであるかどうかを確認するにはどうすればよいですか?

  17. 17

    typename引数のないテンプレートを特殊化するにはどうすればよいですか?

  18. 18

    完全に特殊化されたテンプレートクラスの定義の外でテンプレートメンバー関数を定義するにはどうすればよいですか?

  19. 19

    完全に特殊化されたテンプレートクラスの定義の外でテンプレートメンバー関数を定義するにはどうすればよいですか?

  20. 20

    クラスを特殊化する場合、異なる数のテンプレートパラメータを取得するにはどうすればよいですか?

  21. 21

    別の部分的に特殊化されたテンプレートクラスから部分的に特殊化されたテンプレートクラスを継承する

  22. 22

    C ++「新しい」タイプのテンプレートを特殊化するときに、コンストラクターパラメーターを事前定義するにはどうすればよいですか。

  23. 23

    テンプレート化されたクラスの基本クラスに基づいてメンバー関数を特殊化するにはどうすればよいですか

  24. 24

    派生クラスのメンバーテンプレートクラスの部分的なクラス内特殊化を実行することは合法ですか?

  25. 25

    同じテンプレート関数で複数のタイプを特殊化するにはどうすればよいですか?

  26. 26

    STLソートを使用して、テンプレートの特殊化を使用してカスタムクラスオブジェクトをソートするにはどうすればよいですか?

  27. 27

    クラスにインターフェイスを実装し、別のクラスから継承させるにはどうすればよいですか?

  28. 28

    関数テンプレートを部分的に特殊化する代わりに、どうすればよいですか?

  29. 29

    非型テンプレートクラスを特殊化するために、宣言の外部でメソッドを定義するにはどうすればよいですか?

ホットタグ

アーカイブ