在.NET中,我非常喜欢System.Generic.List,并希望将其复制为学习C ++语言的一种方式。问题是我希望它是通用的,我希望元素包含模板类型T的值。我知道要做什么,但问题在于节点。
template<class T>
struct node
{
T value;
bool isFirst;
node *next;
};
我试过谷歌搜索一段时间,但没有找到任何相关的东西。我刚刚浏览了www.cplusplus.com上的教程。我是否必须使用指针引用该类,如果是,如何?
提前致谢
Gisle Aune
答案 0 :(得分:8)
您的代码没有任何问题。实际上,我可能会把它写成
template<class T>
struct node
{
T value;
bool isFirst;
node<T> *next;
};
因为它不够冗长而且next
指向相同类型的node
更清楚,但是你的版本也很好:在模板中,当你使用的名称时在没有明确指定模板参数的情况下,它暗示它们与当前实例化的模板相同。这可以在C ++标准的§14.6.1中解释:
在类模板的范围内,当模板的名称既不合格也不跟&lt;时,它等同于模板的名称,后跟&lt;&gt;中的模板参数。 [示例:
Set
的构造函数可以称为Set()
或Set<T>()
。 ]其他专业(14.7.3) 可以通过使用适当的模板参数显式限定模板名称来引用该类。 [实施例:
template<class T> class X {
X* p; // meaning X<T>
X<T>* p2;
X<int>* p3;
};
-end example]
顺便说一下,编写通用列表是学习语言的有用练习,但请记住,C ++标准库中已经有许多通用容器可用;除了它们经过彻底的测试和优化之外,它们的“迭代器”抽象允许您在几乎任何容器上使用库中可用的独立算法。
答案 1 :(得分:2)
这段代码写得正确。无论如何,如果你想在c ++中使用通用列表,你可以使用stl
#include <list>
std::list<int> lista;