我的任务是创建一个优先级队列模板类并使用不同的数据类型展示它的工作:int、string 和任何结构。我必须添加、删除、打印特定元素。
类是:
template< class Type >
class PriorityList
{
private:
List<Type> elems;
我选择的结构是这样的:
struct SOMESTRUCT
{
int num;
char word[];
};
据我所知,模板类是一个通用类,可用于任何传入数据类型。我可以看到如何为 int 和 char [] 创建类,但是如何让它也适用于 struct?因为你不能只写 cout<< struct,cin>>...我必须创建另一个函数来输入/输出我的结构,但是如果我把它放在我的模板类中,这个类就不会是再次通用。
我该怎么办?另外,我是否必须制作模板或只留下一个类型名称?
最佳答案
你可以使用
template<typename C>
class PriorityList
{
// ...
};
对于任何类型 C,包括 int
, char
, SOMESTRUCT
.我建议不要在您的模板中使用 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>
, 阅读一些 int
来自 std::cin
然后调用您定义的那些函数,或者您可以只声明一些 SOMESTRUCT
的实例并将它们传递给 PriorityQueue<SOMESTRUCT>
.
在实际项目中,您可能会使用适当的单元测试框架,例如 catch为此,它会自动检查一切是否正常。
关于c++ - C++中的结构和模板类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40958905/