【问题标题】:Structure and template class in C++C++中的结构和模板类
【发布时间】:2017-04-18 22:33:43
【问题描述】:

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

班级是:

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

我选择的结构是这样的:

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

据我了解,模板类是一个通用类,可用于任何传入数据类型。我可以看到如何为 int 和 char [] 创建类,但是如何使它也适用于 struct?因为你不能只写 cout>... 我必须创建另一个函数来输入/输出我的结构,但如果我把它放在我的模板类中,这个类就不会是再次通用。

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

【问题讨论】:

标签: c++ list templates


【解决方案1】:

你可以使用

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

对于任何类型 C,包括 intcharSOMESTRUCT。我建议不要在您的模板中使用 cin 和 cout,因为它使任何类都更难使用。对于您使用的每个课程,您都需要overload operator<< and operator>>,这可能很棘手。

相反,您应该只定义一些简单的成员函数。我会尝试复制std::queue&lt;T&gt;的样式,因为人们会熟悉它。

例如:

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

定义后,您可以根据需要针对不同的类对其进行测试。你可以例如创建main() 来声明PriorityQueue&lt;int&gt;,从std::cin 中读取一些ints,然后调用您定义的那些函数,或者您可以只声明SOMESTRUCT 的一些实例并将它们传递给PriorityQueue&lt;SOMESTRUCT&gt;

在实际项目中,您可能会为此目的使用适当的单元测试框架,例如catch,它会自动检查一切是否正常。

【讨论】:

    猜你喜欢
    • 2012-01-08
    • 1970-01-01
    • 1970-01-01
    • 2011-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-22
    相关资源
    最近更新 更多