なぜこれが機能しないのですか?
template <class T>
struct Low;
template <>
struct Low<int> {};//Here I'm trying to specialize for int
int main()
{
Low<1> a;
}
なぜこれが機能しないのですか?
template <class T>
struct Low;
template <>
struct Low<int> {};//Here I'm trying to specialize for int
int main()
{
Low<1> a;
}
Low<int> a;
動作します - テンプレートは整数引数ではなく型を取ります。
Low<1> a;
あなたのクラス テンプレートLow
は INTEGRAL VALUE ではなく TYPE を期待しています!
そのように使用したい場合は、クラス テンプレートを次のように定義する必要があります。
template <int N>
struct Low {};
これによりLow<1>
、、、、などを書くことができます。Low<2>
Low<400>
と定義するLow
と、
template <class T>
struct Low;
次に、インスタンス化するときにタイプを提供する必要があります。たとえばLow<char>
、Low<unsigned int>
、 などです。
そのため、それぞれのケースでどのように定義され、どのようにインスタンス化されるかの違いに注目してください!
と の間には違いがLow<1>
ありLow<int>
ます。
の特殊化を記述する必要がありますがLow<1>
、元のテンプレートは最初のパラメーターとして値ではなく型を取るため、それは不可能です。