类模板和类型

时间:2019-07-06 03:37:15

标签: c++ templates

template<typename T>class node{};

现在,如果我要在.hpp文件中使用以下模板定义

template<typename node<T>> class list{};

代码无法编译:

Compiler Log

但是如果我将定义更改为

template<typename X> class list{};

并在实例化期间使用node<string>代替X,一切正常。

我想了解为什么代码在第一种情况下无法编译? AFAIK,node<T>本身就是一种独特的类型,就像X一样。

欣赏您的想法。

1 个答案:

答案 0 :(得分:1)

如您所见,这不起作用:

bash

那是因为/bin/bash, sh, bin/sh之后的标记应该是模板参数的名称,而不是名称(T)和现有类型的组合。

如果要限制模板类以确保其使用的是节点,则可以执行以下操作:

template<typename node<T>>

或者,如果您只是想提出建议而不是硬性要求:

typename

在这两种情况下,template<typename T> class list{ /* use node<T> here */ }; 都将在内部使用template<typename T, typename N = node<T>> class list{ /* use N here */ };