テンプレート パラメータは、次のように、それに続く別のテンプレート パラメータで使用できます。
template<typename T, T N>
struct s
{
};
しかし、「N」の後に宣言されている場合、「T」を参照することは可能ですか?
これは動作しません :
template<T N, typename T>
struct s
{
};
「T」を事前に宣言するか、何か他のことを行うことで、コンパイラを支援できますか?
事前に感謝します。
編集 : 最初の 2 つの返信は、「なぜそれをする気があるのですか?」と尋ねていました。目標を説明します:
テンプレート化されたクラスを簡単に使用できるようにするために、コンパイラに型 "T" を推論させたいと考えています。
例えば :
template<typename T, T A, T B>
struct sum
{
static T const value = A + B;
};
このテンプレートは次のように使用できます。
sum<int, 1, 2>::value
しかし、次のように使用できればより良いでしょう:
sum<1, 2>::value
技術的には、コンパイラは "1" と "2" : "int" の型を認識しており、実際にはこれらの情報を使用して関数の最適なオーバーロードを見つけるため、可能であるはずです。したがって、このようにテンプレートを宣言することにより:
template<T A, T B, typename T>
struct sum
{
static T const value = A + B;
};
コンパイラはその機能を使用して、最初と 2 番目のパラメーターによって提供される情報から最後のパラメーターを推測し、インスタンス化するのに最適なテンプレートを見つけることができます。