Не может специализироваться структура - PullRequest
1 голос
/ 03 апреля 2011

Почему это не работает?

template <class T>
struct Low;

template <>
struct Low<int> {};//Here I'm trying to specialize for int

int main()
{
Low<1> a;

}

Ответы [ 3 ]

5 голосов
/ 03 апреля 2011

Low<int> a; будет работать - Ваш шаблон принимает тип , а не целочисленный аргумент.

4 голосов
/ 03 апреля 2011
Low<1> a;

Ваш шаблон класса Low ожидает TYPE, а не INTEGRAL VALUE!

Если вы хотите использовать этот способ, вы должны определить свой шаблон класса как:

template <int N>
struct Low {};

Это позволяет вам писать Low<1>, Low<2>, Low<400> и т. Д.


Если вы определите Low как,

template <class T>
struct Low;

Тогда вы 'мы предоставляем тип при его создании.Например, Low<char>, Low<unsigned int> и т. Д.

Так что обратите внимание на то, как они определены в каждом конкретном случае, и как они создаются!

3 голосов
/ 03 апреля 2011

Существует разница между Low<1> и Low<int>.

Вам потребуется написать специализацию для Low<1>, но это невозможно, поскольку исходный шаблон принимает тип в качестве первого параметра, а не значение.

...