模板类专业化

发布于 2024-10-28 10:01:03 字数 608 浏览 1 评论 0原文

我确实阅读了一些相关的线程,但问题仍然不清楚:

#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

我错过了一些要点吗?我感觉我有。我什至尝试在那里定义函数,但这没有帮助。

I did read some of the related threads but still the issue was not clear:

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

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

};

The compilation error:

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

From this link: coderSource.net

Have I missed some point? I feel I have. I even tried to define the functions there, but that was not helpful.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

允世 2024-11-04 10:01:03

这是称为堆栈的模板的模板特化。堆栈未在任何这些头文件中定义。如果您希望定义一个新的模板类,您必须首先定义基本情况

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

That is a template specialisation of a template called stack. stack is not defined inany of those header files. If you wish to define a new template class you must first define the base case

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

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

If you wish to only define stack for int and not for every type you can use

template<typename T> class stack;
template<>
class stack<int>
{
 public:
  std::vector<int> stackVector;
};
梦萦几度 2024-11-04 10:01:03

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

template <typename T>
class stack
{
};

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

You can not specialize your template if you don't have a template to specialize yet. So this should work:

template <typename T>
class stack
{
};

template <>
class stack<int>
{
  public:
    std::vector<int> stackVector;
};
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文