2016-12-04 76 views
0

我的任务是创建一个优先级队列模板类,并使用不同的数据类型显示其工作:int,string和任何结构。我必须添加,删除,打印一个特定的元素。C++中的结构和模板类

的类是:

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

作为一个结构我挑选是这样的:

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

据我所知一个模板类是可用于任何传入数据类型的通用类。我可以看到如何为int和char []创建类,但是如何使它对结构也起作用?既然你不能只写cout < <结构,既不cin >> ...我不得不创建另一个函数输入/输出我的结构,但如果我把它放在我的模板类中,类不会是再次普遍。

我该怎么办?另外,我是否必须制作模板或只留下一个类型名称?

+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

您可以使用

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

任何类型C,包括intcharSOMESTRUCT。我建议不要在你的模板中使用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 
}; 

一旦它被定义,你可以,但是你想测试一下不同类别。你可以例如创建main()以声明PriorityQueue<int>,从std::cin中读取一些int,然后调用您定义的那些函数,或者您可以声明SOMESTRUCT的某些实例并将它们传递给PriorityQueue<SOMESTRUCT>

在一个真实的项目中,您可能会使用适当的单元测试框架,如catch用于此目的,它会自动检查所有工作。