4

次のテンプレートがあるとします

template <typename T>
class{
   T t;
};

ここで、tをその型のデフォルト値で初期化するコンストラクターを追加したいと思います。つまり、数値型の場合、tはで初期化する必要があり0、ポインタの場合、tはで初期化する必要がありますnullptr。最後に、構造体のような他のタイプが存在する可能性があります。ここで、適切な初期化はデフォルトのコンストラクターです(とにかく呼び出されるので、ここでは何もする必要はありません)。

結論として、私はこのようなものを探しています:

template<typename T>
class X{
    T t;
    X() : t(default_value<T>::value);
}

私の想像上の構文が指摘しているように、デフォルト値を持つさまざまな特殊化を備えたある種のテンプレートで可能になると思います。しかし、構造体とクラスを処理する方法は?を指定t(...)したので、デフォルトのコンストラクターはオプションではなくなりました。

4

1 に答える 1

13

あなたはただすることができます

X() : t() { }

および/またはC++11のこれ

X() : t { } { } // see Johannes Schaub's comments about this

これにより、初期化(またはデフォルトの初期化?)tがそのタイプのデフォルト値になります。組み込みの場合は0、配列の場合は一連の(値?デフォルト)の初期化、ユーザーの場合はデフォルトのコンストラクターを使用します。定義されたタイプ。

于 2012-09-04T15:53:59.850 に答える