我有一个链表模板可以使用,但是我不知道如何使用它或调用成员函数。
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] 删除。
我来说两句