嵌套模板问题C ++

时间:2014-02-20 17:59:25

标签: c++

我有一个模板化的节点类声明为

    template <class T_>
    class Node : public std::iterator<std::bidirectional_iterator_tag, T_, T_>
    {
    ...
    }

哪种方法正常,我正在尝试将此现有类应用于新的链表类。

我想通过调用

的内容来创建它
    LinkedList<float> nodeList;

它隐式采用给定的类型,并且在类的结构中将其处理为类型T _的节点。

有没有办法在不将节点作为LinkedList的子类的情况下执行此操作?

3 个答案:

答案 0 :(得分:1)

这是你要问的吗?

template <class T_>
class LinkedList
{
public:
    typedef Node<T_> node_type;

    void AddNode(node_type *node)
    { /*...*/ }
};

从技术上讲,typedef不是必需的,但IME以这种方式键入dede依赖类型是一个很好的实践。

答案 1 :(得分:0)

如果我理解你的问题是正确的,你需要使用模板化的类类型来实例化一个类模板。使用以下语法:

LinkedList<Node<float> > nodeList;

(注意> >之间的空格;添加它总是一个好主意,因为某些编译器的旧版本在区分这些结构和移位运算符>>时遇到了麻烦

答案 2 :(得分:0)

您可以将迭代器作为默认模板参数提供:

template<
    class T,
    class Iterator = Node<T>
> class LinkedList
{
    // ...
};