为什么不能将模板及其模板成员的模板参数列表组合在一起?

时间:2018-09-03 03:17:16

标签: c++ templates

我正在阅读“ Stroustrup编写的C ++编程语言”,其中提到的内容是

  

请注意,模板及其模板成员的模板参数列表无法组合。

示例如下。

template<class T>
  template<class T2> Ptr<T>::operator Ptr<T2> () { return Ptr<T2>(p); }

template<class T, class T2> // error
  Ptr<T>::operator Ptr<T2> () { return Ptr<T2>(p); }

我不明白为什么不允许这样做,有人可以解释为什么吗?

1 个答案:

答案 0 :(得分:3)

因为这是两个不同的模板(一个模板化的类和该类的模板化的成员函数),并且谁在起草规范,所以决定有必要在函数定义中使其保持可见。

我认为这完全合乎逻辑。如果按照建议的方式完成操作,那么阅读代码的程序员可能会认为只有一个带有两个参数的模板化类,这是错误的。