2016-12-04 4 views
0

私の仕事は、優先度キューのテンプレートクラスを作成し、異なるデータ型int、string、およびstructを使用してその作業を表示することです。特定の要素を追加、削除、印刷する必要があります。C++での構造体とテンプレートクラス

クラスがある:私はテンプレートクラスは、すべての着信データ・タイプのために使用することができる普遍的なクラスであることを理解したよう

struct SOMESTRUCT 
{ 
    int num; 
    char word[]; 
}; 

:私が選んだの構造体として

template< class Type > 
class PriorityList 
{ 
    private: 
    List<Type> elems; 

これでした。私はintとchar []のクラスを作成する方法を知ることができますが、structのためにどうすればそれを動作させることができますか?あなたは構造体を入力/出力するための別の関数を作成する必要がありますが、私がテンプレートクラスに入れた場合、クラスは作成されません。再び普遍的な。

私は何をしますか?また、テンプレートを作成するか、1つのtypenameだけを残す必要がありますか?

+0

[ostreamのために<<演算子を正しくオーバーロードするにはどうすればいいですか?](http://stackoverflow.com/questions/476272/how-to-properly-overload-the-operator-for-an-ostream ) – wally

+0

[This](https://msdn.microsoft.com/en-us/library/1z2f6c2k.aspx)も役立ちます。 – wally

+0

うーん。オプションありがとう!しかし、私は自分自身のIntクラスとCharクラスも作成する必要があります。だから私はテンプレート、右を書くことができますか? – Mary

答えて

1

あなたはintcharSOMESTRUCTを含む、あらゆるタイプC用

template<typename C> 
class PriorityList 
{ 
// ... 
}; 

を使用することができます。どのクラスでも使用するのが難しくなるので、テンプレートでcinとcoutを使用することをお勧めします。使用するクラスごとにoverload operator<< and operator>>にする必要があります。これは難しいかもしれません。

代わりに、単純なメンバー関数を定義する必要があります。人々はそれに精通しているので、私はstd::queue<T>のスタイルをコピーしようとします。例えば

:それが定義されたら、あなたが欲しいしかし

template<typename C> 
class PriorityQueue 
{ 
    public: 
    void push(const C& item, int priority=0){ 
    // ... 
    } 
    C& front(){ 
    // ... 
    } 
    // and other required functions 
}; 

、あなたが別のクラスのためにそれをテストすることができます。たとえば、 PriorityQueue<int>を宣言するためにmain()を作成し、intstd::cinから読み込み、定義した関数を呼び出すか、SOMESTRUCTのインスタンスを宣言してPriorityQueue<SOMESTRUCT>に渡すことができます。

現実のプロジェクトでは、この目的のために恐らくcatchのような適切なユニットテストフレームワークを使用することになります。