c++ - 我可以在类模板的方法中引用另一个模板类型的对象吗?

标签 c++ templates linked-list

我的目标是创建一个包含不同类型节点的链表。为此,我创建了一个节点类模板,如下所示:

template <class T>
class N_Node
{
public:
    N_Node(T e, N_Node *p = nullptr ,N_Node *n = nullptr);
    void set_previous(N_Node<T> *p);
    void set_next(N_Node<T> *n);
    N_Node get_previous();
    N_Node get_next();

    T element;
    N_Node *prev;
    N_Node *next;
};

现在,在 main.cpp 中,当我尝试执行以下操作时,它给我一个错误,提示类型为 N_Node<int>* 的参数与 N_Node<char>* 类型的参数不兼容.所以,我想知道是否有任何方法可以指定设置为前一个的节点可以是与当前节点不同的类型?

N_Node<int> n1(5);
N_Node<char> n3('g');
n3.set_previous(&n1);

最佳答案

当然,创建一个 N_Node_Base省略 element 的类成员,并从中继承 N_Node<T> .大多数 C++ 标准库实现这样做是为了减少模板开销。

当然,这样做您将失去遍历列表和访问元素的能力,因为您不知道每个元素的类型。您可能希望通过 T 的最小界面进行类型删除。使用例如boost::any , 但你必须详细说明你为什么要这样做。

关于c++ - 我可以在类模板的方法中引用另一个模板类型的对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10969277/

相关文章:

C++ |重用基类的 protected 成员

c++ - 如何使用 VC++ 将此脚本合并到构建过程中

c++ - 通过 using 指令可见的声明的名称隐藏

c++ - 由其他模板类的内部 typedef 定义的类型的模板参数

java - 如何在另一个类中调用列表对象

c++ - 多线程和使用事件

c++ - 模板容器类被认为是 "scalar"?

javascript - 使用模板事件监听器删除 Meteor.js 集合时出现问题

java - LinkedLIst indexOf递归实现

algorithm - 如何在不遍历的情况下找到单链表的中间节点?