3

テンプレート化されたクラスのメンバー変数を宣言するとき、テンプレート パラメータの値に応じてメモリをゼロにする方法はありますか?

例としてはstd::array<T,n>n==0.

例えば:

template<int num_optional_args> class C {
    int some_variable;
    std::array<int,num_optional_args> optional_args;
};

optional_args のオーバーヘッドをなくす方法はありますnum_optional_args==0か?

. _ std::array<T,n>_ T_n==0

ゼロスペースを予約する別の手段はありますか? これが C++ 標準の一部ではないのはなぜですか?

4

5 に答える 5

1

少なくとも 1 つの要素のスペースを確保するか、その要素へのポインターを保持する必要があります。ゼロメモリを必要とする配列構造を持つことは不可能です。

次の構造体は、作成時に 1 つの int と 1 つのポインターのみを受け取ります。これは、ほぼゼロに近くなります。

template<typename T>
class array {

  int sz;
  T *head;

};

それ以上に、クラス定義でゼロスペースを要求するという概念はばかげています。インスタンス化されたときにゼロに近いスペースを取ることは理にかなっており、次のようにコンストラクターをパラメーター化することで実行できます。

template<typename T>
class array {

  int sz;
  T *head;

  array(int n) {
      if (n == 0) return;
      head = new T[n];
  }
};
于 2013-06-06T20:50:39.990 に答える