【问题标题】:Utilizing Template Class in C++在 C++ 中使用模板类
【发布时间】:2018-07-08 18:16:22
【问题描述】:

我有一个链表模板要使用,但我不知道如何使用它或调用成员函数。

template <class Object>
class List {
public:
    List();
    List(const List & rhs);
    ~List();

    bool isEmpty() const;

    void makeEmpty();
    ListItr<Object> zeroth() const;
    ListItr<Object> first() const;

    template <class Object> Object List<Object>::insert(const Object & x, const ListItr<Object> & p);
    ListItr<Object> find(const Object & x) const;
    ListItr<Object> findPrevious(const Object & x) const;

    void remove(const Object & x);
    const List & operator=(const List & rhs);
private:
    ListNode<Object> *header;
};

template &lt;class Object&gt; Object List&lt;Object&gt;::insert(const Object &amp; x, const ListItr&lt;Object&gt; &amp; p);这行是声明成员函数的正确方法吗?它到底在做什么?以及如何调用函数并将值传递给它们以在此列表中插入或删除?

【问题讨论】:

  • 这个问题已经详细回答here。不过可能需要一些时间阅读。

标签: c++ list class templates


【解决方案1】:

您可能应该阅读有关模板的教程,因为这些都是相对琐碎的事情。

但是:

模板不是类,它们在编译时生成类。

template<class Object>
Class List {...};

中的类是您将传入的实际类型的占位符。 它可以是任何东西。 (注意:你也可以写typename而不是class,都是一样的)

但请注意:它不包含对象,它包含对象的类型

你会像这样创建列表对象:

List<int> list1;
List<double> list2;
List<MyOtherClass> list3;

然后,当您通过“。”访问方法时,它们的行为就像普通对象一样。或“->”运算符

模板参数的类型在类内部是已知的,只要在类中内联定义方法,就不必显式调用 Object 类型的列表

还为模板类中的方法声明另一个模板会导致第二个类型参数,该参数将由给函数的参数推导出,它们将是独立的(或者实际上是名称冲突,我不确定,因为我是在我的手机上)

另外:请记住,您不能在 .cpp 文件中定义模板方法,所有带有模板的内容都必须在 .h 文件中,否则链接器会抛出错误

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多