5

私は関連するスレッドのいくつかを読みましたが、それでも問題は明確ではありませんでした:

#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

私はいくつかのポイントを逃しましたか?私は持っていると感じます。そこで関数を定義しようとさえしましたが、それは役に立ちませんでした。

4

2 に答える 2

8

これは、スタックと呼ばれるテンプレートのテンプレートの特殊化です。スタックは、これらのヘッダーファイルのいずれにも定義されていません。新しいテンプレートクラスを定義する場合は、最初にベースケースを定義する必要があります

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;
};
于 2011-04-01T08:45:28.840 に答える
2

まだ専門化するテンプレートがない場合は、テンプレートを専門化することはできません。したがって、これは機能するはずです。

template <typename T>
class stack
{
};

template <>
class stack<int>
{
  public:
    std::vector<int> stackVector;
};
于 2011-04-01T08:40:37.830 に答える