在结构中使用模板 - 制作通用链表

Gis*_*une 0 c++ templates struct linked-list

在.NET中,我非常喜欢System.Generic.List,并希望将其复制为学习C++语言的一种方式.问题是我希望它是通用的,我希望元素包含模板类型T的值.我知道要做什么,但问题在于节点.

template<class T>
struct node
{
    T value;
    bool isFirst;
    node *next;
};
Run Code Online (Sandbox Code Playgroud)

我试过谷歌搜索一段时间,但没有发现任何相关的东西.我刚刚浏览了www.cplusplus.com上的教程.我是否必须使用指针引用此类,如果是,如何?

提前致谢

Gisle Aune

Mat*_*lia 8

您的代码没有任何问题.实际上,我可能会把它写成

template<class T>
struct node
{
    T value;
    bool isFirst;
    node<T> *next;
};
Run Code Online (Sandbox Code Playgroud)

因为它不是那么冗长而且next指向node相同类型的更清楚,但是你的版本也很好:在模板中,当你使用类的名称而没有明确指定模板参数时,它暗示它们是当前实例化的模板中的相同模板.这在C++标准的§14.6.1中解释:

在类模板的范围内,当模板的名称既不合格也不跟<时,它等同于模板的名称,后跟<>中包含的模板参数.[示例:构造函数Set可以称为Set()Set<T>().通过使用适当的模板参数显式限定模板名称,可以引用该类的其他特化(14.7.3).[例:

template<class T> class X {
    X* p;      // meaning X<T>
    X<T>* p2;
    X<int>* p3;
};
Run Code Online (Sandbox Code Playgroud)

- 末端的例子]


顺便说一下,编写通用列表是学习语言的有用练习,但请记住,C++标准库中已经有许多通用容器可用; 除了它们经过彻底的测试和优化之外,它们的"迭代器"抽象允许您在几乎任何容器上使用库中可用的独立算法.