Шаблонная специализация - PullRequest
4 голосов
/ 01 апреля 2011

Я прочитал некоторые связанные темы, но проблема все еще не ясна:

#include <stdio.h>
#include <vector>
#include <iostream>

template <> class stack <int>
{
  public:
    std :: vector <int> stackVector;

};

Ошибка компиляции:

templateSpecializ.cpp:5: error: ‘stack’ is not a template
templateSpecializ.cpp:6: error: explicit specialization of non-template ‘stack’

По этой ссылке: coderSource.net

Я что-то упустил?Я чувствую, что у меня есть.Я даже пытался определить функции там, но это не помогло.

Ответы [ 2 ]

7 голосов
/ 01 апреля 2011

Это специализация шаблона для стека.стек не определен ни в одном из этих заголовочных файлов.Если вы хотите определить новый класс шаблона, вы должны сначала определить базовый случай

template<typename T>
class stack
{
  //implementation goes here
};

template<>
class stack<int>
{
 public:
  std::vector<int> stackVector;
};

Если вы хотите определить стек только для int, а не для каждого типа, который вы можете использовать

template<typename T> class stack;
template<>
class stack<int>
{
 public:
  std::vector<int> stackVector;
};
2 голосов
/ 01 апреля 2011

Вы не можете специализировать свой шаблон, если у вас еще нет шаблона для специализации.Так что это должно работать:

template <typename T>
class stack
{
};

template <>
class stack<int>
{
  public:
    std::vector<int> stackVector;
};
...