用于存储泛型对象的c++ LinkedList节点

C++ LinkedList Node to store generic objects

本文关键字:c++ LinkedList 节点 对象 存储 泛型 用于      更新时间:2023-10-16

如果你有一个通用节点存储int, float或某种类型的对象,你怎么能在你的节点中存储通用对象呢?

typedef struct node{
      Dog data;
      node* next;
  }*nodePtr;

该节点存储Dog对象…如何存储通用对象?

我的一个想法是让Dog对象和所有其他对象从一个更通用的Object类继承。使用模板之外的好方法?

c++为泛型提供了template<>:

template<typename T>
struct node {
    T data;
    node<T> *next;
}

制作一个模板,如下所示:

template<typename T>
struct Node
{
    T data;
    Node<T> *next;
};

查找模板信息的一个很好的资源可以是Wikipedia。

我的一个想法是让Dog对象和所有其他对象从一个更通用的Object类继承。走得好吗?

如果所有类型都有共同之处,则为它们创建一个共同的基类型。

不要仅仅因为希望将所有类型存储在同一个容器中,就使这些类型派生自一个公共基。你把它弄反了。如果希望将所有类型存储在同一个容器中,则它们应该已经具有一些共同之处。否则你的容器就是一串位。它所能做的就是为每种类型分别使用不同的容器。例如,您不能遍历容器并在每个元素上调用方法,因为不存在所有元素都具有的方法!

你说

很好的答案,但我希望通过OO原则来实现。

在我看来,面向对象的基本原则之一是,所有的类都应该是有意义的。这并不意味着它们必须对应于具体对象,或者甚至包含任何实现,但它们至少必须包含一些接口。一个通用的Object类在c++中是没有意义的。