c++ - C++中的结构和模板类

标签 c++ list templates

我的任务是创建一个优先级队列模板类并使用不同的数据类型展示它的工作: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/

相关文章:

css - Wordpress Revolution Slider margin-bottom 显示子模板中的间隙

c++ - 队列给出错误数据

c++ - 当调用 std::cout 时使用什么外部 API? ( window )

python - 如何比较对象列表中的匹配值?

r - 有效地将命名列表转换为 data.frame

visual-studio-2010 - 如何在 Visual Studio 2010 中编辑默认的 Razor Creat/编辑脚手架

c# - 在 WinForms 中嵌入 XNA

c++ - Fortran 是否复制传递给函数/子例程的数组部分?

c# - 在 C# List<String> 中搜索子字符串的更快方法

c++ - Variadic 模板参数总是必须放在最后吗?