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

时间:2012-06-10 13:58:13

标签: 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);

1 个答案:

答案 0 :(得分:1)

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

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