Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我可以在类模板&x2019;中引用另一个模板类型的对象吗;什么方法?_C++_Templates_Linked List - Fatal编程技术网

C++ 我可以在类模板&x2019;中引用另一个模板类型的对象吗;什么方法?

C++ 我可以在类模板&x2019;中引用另一个模板类型的对象吗;什么方法?,c++,templates,linked-list,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_prev

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

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;
};
模板
类N_节点
{
公众:
N_节点(te,N_节点*p=nullptr,N_节点*N=nullptr);
无效集_上一个(N_节点*p);
void set_next(N_节点*N);
N_节点get_previous();
N_节点获取_下一步();
T元素;
N_节点*prev;
N_节点*下一步;
};
现在,在main.cpp中,当我尝试执行以下操作时,它给出了一个错误,即
N\u Node*
类型的参数与
N\u Node*
类型的参数不兼容。因此,我想知道是否有任何方法可以指定作为上一个节点集的节点可以与当前节点的类型不同

N_Node<int> n1(5);
N_Node<char> n3('g');
n3.set_previous(&n1);
N_节点n1(5);
N_节点n3('g');
n3.设置前一个(n1);

当然,创建一个
N\u Node\u Base
类,该类省略
元素
成员,并从中继承
N\u Node
。大多数C++标准库实现都是为了减少模板开销。


当然,这样做会失去遍历列表和访问元素的能力,因为您不知道每个元素的类型。您可能想使用例如
boost::any
T
输入一个最小接口,但您必须详细说明为什么要这样做。

当然,创建一个
N_节点_基
类,该类省略
元素
成员,并从中继承
N_节点
。大多数C++标准库实现都是为了减少模板开销。


当然,这样做会失去遍历列表和访问元素的能力,因为您不知道每个元素的类型。您可能希望使用例如
boost::any
T
输入一个最小接口,但您必须详细说明为什么要这样做。

抱歉,但哪个部分需要修复?@nave查看当前版本(特别是Griwes的更改),并将其与原始版本进行比较。要比较版本,您可以单击帖子下方的“编辑的X秒/分钟前”链接,该链接位于您用户名旁边。好的,我看到了。谢谢你的修改。他们让问题变得更清楚了。对不起,但哪一部分需要修改?@nave查看当前版本(特别是Griwes的修改),并将其与原始版本进行比较。要比较版本,您可以单击帖子下方的“编辑的X秒/分钟前”链接,该链接位于您用户名旁边。好的,我看到了。感谢您所做的更改。他们让问题变得清晰了。我们的目标是创建一个动态调整大小的异构列表。在托管/脚本语言中,拥有异构列表是有意义的,因为在托管/脚本语言中,所有内容都是一个对象(或者可以装箱到一个对象中)。在C++中,没有一个基<代码>对象< /C>类型(虽然有很多框架提供一个),类似于拳击。你需要考虑你想用列表的元素做什么。嗯,目标是创建一个动态调整大小的异构列表。在一个管理/脚本语言中,一个异构列表是有意义的,其中所有的东西都是一个对象(或者可以被装箱成一个对象)。在C++中,没有一个基<代码>对象< /C>类型(虽然有很多框架提供一个),类似于拳击。你需要考虑你想用列表中的元素做什么。