在C ++中使用模板类

尼克尼克

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

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);是声明成员函数的正确方法吗?它到底在做什么?以及如何调用函数并将值传递给它们以从列表中插入或删除?

爵士头像

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

然而:

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

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

<>中的类是您将传入的实际类型的占位符。可以是任何东西。(注意:您也可以写typename代替class,这是相同的)

但是要当心:它不保存对象,而是保存对象的类型

您将创建像这样的列表对象:

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

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

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

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章