在C ++中使用模板类

时间:2018-01-29 23:25:28

标签: c++ list class templates

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

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 <class Object> Object List<Object>::insert(const Object & x, const ListItr<Object> & p);是否是声明成员函数的正确方法?到底是做什么的?如何调用函数并将值传递给它们以从此列表中插入或删除?

1 个答案:

答案 0 :(得分:2)

您应该阅读有关模板的教程,因为这些是相对简单的事情。

然而:

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

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

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

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

您可以像这样创建列表对象:

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

然后他们表现得像普通对象,你通过&#34;。&#34;访问方法。或&#34; - &gt;&#34;操作

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

同样为模板类中的方法声明另一个模板会产生第二个类型参数,该参数将由给予函数的参数推断出来,它们将是独立的(或实际上是名称冲突,我不确定,因为我&#39 ;我在手机上)

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