模板类专业化

时间:2011-04-01 08:37:24

标签: c++ templates template-specialization

我确实阅读了一些相关的主题,但问题仍然不明确:

#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 个答案:

答案 0 :(得分:7)

这是一个名为stack的模板的模板特化。堆栈没有在那些头文件中定义。如果要定义新的模板类,必须先定义基本案例

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;
};

答案 1 :(得分:2)

如果您还没有专门化的模板,则无法专门化您的模板。所以这应该有效:

template <typename T>
class stack
{
};

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