【发布时间】:2015-01-08 19:20:55
【问题描述】:
模板化类的最有效方法是调用模板化结构。这是模板的经典有序列表问题。到目前为止,我的整个有序列表都有效(当我只是手动更改类型时)。但是,我不确定如何模板化这对对象(结构和类)。
所以基本上,这是我的代码的结构:
struct Node {
int* data;
Node* next;
};
class OList {
private:
Node* start;
int size;
public:
a bunch of manipulation functions
};
所以,我的愿望是简单地将结构模板化,然后接受将模板传递给 Node 结构类型的参数。但是,我的第一次尝试是:
template<class T>
在 Node 结构之前并将所有 ints* 更改为 T* 失败了。根据任何人的经验,什么可能是更好的方法?任何人都可以指出我正确的方向或给我一些模板基础知识的好参考吗?我只能找到一些具体的问题,这并不能让我很好地了解模板的工作原理。
更新:我的代码在这一点上运行良好。我唯一不明白的是如何在函数中返回 Node 结构的指针。例如,在一个函数中,
template <class T>
List<T>::Node<T>* List<T>pos(int val); //trying to return a pointer to the node at a specified spot
我收到以下错误:“Non-templated 'Node' used as template。注意:使用 OList::template Node' 表示它是一个模板 (???) 错误:需要 'typename' 在 'OList ::Node',因为'OList 是一个依赖范围“清除这些错误的最有效方法是什么?注释掉这一功能时,代码可以完美运行。
【问题讨论】:
-
请在模板化后包含
Node和OList的声明。 -
"failed miserably" 甚至无法充分描述问题...您是否也将
OList设为模板?还是只是Node"? -
我不确定这是否是一个好习惯或可能,但您可以将
Node类放在OList类中并从那里开始? -
我做了两个模板
标签: c++ class templates struct