0
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 类本身成为其中的一部分时,我不确定如何使用模板

4

1 回答 1

0

Node 的每个声明都需要一个 <> 中的类型。

为了

Node* temp = myq.head;

这取决于 myq.head 的定义。如果它被定义为 Node<int>* 那么 temp 也必须被定义为 Node<int>* temp。您总是必须拥有带有模板对象的 <>。

如果您想在不知道类型的情况下拥有 Node*,则可以使用继承。有一个继承自非模板 Node 类的模板化 TypedNode 类。您将能够使用 Node* 传递所有这些 TypeNode<> 对象,但您将无法在不知道节点类型的情况下获取节点的值。

我不推荐这样做,但如果你真的想制作混合类型的节点列表,你需要通过以下任一方式跟踪类型

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