あなたがTという名前の何かにリンクしていない限り、その方法1はうまくいきません。また、クラス宣言の後に;
が必要です。
2つのTの値が同じかどうかは、同じではありません。テンプレートの全体のポイントは、「ちょっと」同じであるが異なるタイプの2つのタイプを持つことができるということです。彼らは同じインターフェイスを持っている点で唯一同じです。
私は1つのプログラムでは、このような何かを行うことができます:
PriorityQueue<std::string> stringQueue;
PriorityQueue<int> intQueue;
と私はキューの二つの異なる種類を持っているでしょう。 stringQueue
はタイプPriorityQueue<std::string>
であり、intQueue
はタイプPriorityQueue<int>
です。 C++コンパイラは2つの異なるバイナリをそれぞれコンパイルするため、これらは実際には同じインタフェースを共有する異なる型です。私のようなものでした場合:
intQueue.enqueue(5, 0);
stringQueue.enqueue("hello world", 1);
をPriorityQueue<std::string>::enqueue
が新しいTask
を作るとき、それはintQueue
と整数とのTask<std::string
と同じになるため、その後stringQueue
は、タイプTask<string>
の単一Task
が含まれます。
Tはただ普通である変数ですが、あなたはまた、次のようにテンプレートを行うことができます。
template<typename Type>
template<typename A> //these two are basically the same as T
template<Task SpecialTask> //here SpecialTask would have to be a
//Task or a child of Task
template<class C> //C must be a class
template<typename T, U, V> //here are three templates in one declaration
template<PriorityQueue PQ,
Task T,
typename U> //three of different "lineage"
のでどのようにコンパイラが
PriorityQueue<int>
が
Task<int>
属性を持つ必要があることを知っているのですか?テンプレート属性を持っていることに気づいたときや、テンプレートを新しくしたときに、まだそれがなければ
Task<int>
のバイナリをコンパイルしてコンパイルします。
私の最初の実装では、PriorityQueueクラスはTask構造体で定義したTテンプレートを見つけることができないようです。どうすればいい? @Mantracker。 – Mantracker
2番目のバージョン..(?!)を使用することによって私は従わない。 –
混乱して申し訳ありませんが、私ははっきりと質問を編集しました – Mantracker