Как правильно делать специализацию шаблона?

Пытаюсь сделать по подобию примера из книги, но не получается.

пример шаблона

Пробовал разные варианты. И typename Space = int, и class Stack<bool, Space = int>. Ничего не помогает. Ближе всего видимо так:

template <typename T, int Space = 4096>
class Stack
{

};

template <template Space>
class Stack<bool>
{

};

Но как оказалось, даже если точь-в-точь делать, всё равно не работает. Выдаёт - E0707 требуется список параметров шаблона, и E0840 использование списка аргументов шаблона в объявлении основного шаблона не допускается:

template <template T1, template T3>
class Temp <T1, int, T3>
{

};

Может ли это быть опечатка? Или же я что-то упускаю из вида?

UPD. Извиняюсь, что не удачно объяснил. Попытаюсь более развёрнуто. До этого начинал с малого. Вначале написал просто класс Stack, который хранит элементы. Размер у которого был фиксированный. Т.е. объявил приватное поле int space = 20. Потом добавил шаблон. И отладил его. Версия вида:

template <typename T>
class Stack
{

};

template <>
class Stack<bool>
{

};

работает, но самый последний шаг вызвал наибольшие трудности. Я не могу понять как правильно добавить ещё один параметр, и в шаблон, и в специализацию.


Ответы (2 шт):

Автор решения: Igor Pawus

Всем спасибо.

template<int Space>
class Stack<bool, Space>

Решило проблему.

→ Ссылка
Автор решения: Harry

Не очень понятно все же...

Вы хотите что-то такое?

template <typename T, int Size = 40>
class Stack
{
public:
    Stack() { cout << Size << endl; }
};

template<int Size>
class Stack<bool, Size>
{
public:
    Stack() { cout << "bool " << Size << endl; }

};

int main(int argc, char * argv[])
{
    Stack<int> s1;
    Stack<bool,20> s2;
}
→ Ссылка