template<typename T>class node{};
现在,如果我要在.hpp
文件中使用以下模板定义
template<typename node<T>> class list{};
代码无法编译:
但是如果我将定义更改为
template<typename X> class list{};
并在实例化期间使用node<string>
代替X
,一切正常。
我想了解为什么代码在第一种情况下无法编译? AFAIK,node<T>
本身就是一种独特的类型,就像X
一样。
欣赏您的想法。
答案 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 */ };
。