转换为模板类(NODES)

时间:2013-09-29 04:10:21

标签: c++

template <class Type>
class Node
{
public:
        Node ()
        {
        }
        Node (Type x, Node* nd)
        {
             data = x;
             next = nd;
        }
        Node (Type x)
        {
            data = x;
            next = NULL;

        }
        ~Node (void)
        {

        }

        Node (const Node* & nd)
        {
            data = nd->data;
            next = nd->next;
        }

        Node & Node::operator = (const Node* & nd)
        {
            data = nd->data;
            next = nd->next;
        }

        T data;
        Node* next;


};

我是否用

替换每个Node *
Node*<Type>

我尝试更换它并尝试运行类似

的内容
Node* temp = myq.head;

但它表示缺少类模板“Node”的参数列表。当我需要Node类本身作为它的一部分时,我不确定如何使用模板

1 个答案:

答案 0 :(得分:0)

Node的每个声明都需要&lt;&gt;。

中的类型

对于

Node* temp = myq.head;

取决于myq.head的定义。如果它被定义为Node&lt; int&gt; *那么temp也必须被定义为Node&lt; int&gt; * temp。你总是必须拥有&lt;&gt;与模板对象。

如果您想在不知道类型的情况下拥有Node *,则可以使用继承。有一个模板化的TypedNode类,它继承自非模板的Node类。您将能够传递所有这些TypeNode&lt;&gt; Node *周围的对象,但是如果不知道它们的类型,你将无法获得节点的值。

我不建议这样做,但如果真的希望制作具有混合类型的节点列表,则需要通过

跟踪类型
  1. 在基类中包含一个枚举类型,用于定义存储在节点中的类型,并为每个类定义typedNode,在其构造函数中设置枚举,或从虚拟方法返回它。
  2. RTTI,运行时类型信息http://en.wikipedia.org/wiki/Run-time_type_information