首页 > 解决方案 > 为什么一个模板的模板参数列表和它的模板成员不能合并?

问题描述

我正在阅读“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); }

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

标签: c++templates

解决方案


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

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


推荐阅读