繁体   English   中英

为什么带有默认模板 arguments 的模板不能用作模板模板参数中具有较少模板参数的模板

[英]Why the template with default template arguments can't be used as template with less template argument in Template Template Parameters

myTemplateTemplate 期望第二个模板参数是一个带有一个参数的模板。 myDefaultTemplate 是一个带有两个 arguments 的模板,第二个参数的默认类型是 int。

在 VS2008 中,我收到编译错误:class 模板“myDefaultTemplate”的模板参数列表与模板参数“TT”的模板参数列表不匹配

那么,为什么 myDefaultTemplate 不能用作只有一个参数的模板呢? 如果 C++ 编译器支持的话会有什么负面影响吗?

template
<typename T1, typename T2 = int>
class
myDefaultTemplate{
      T1 a;
      T2 b;
};

template
<typename T1, template<typename T2> class TT>
class
myTemplateTemplate{
      T1 a;
      TT<T1> b;
};

int main(int argc, char* argv[]){
      myTemplateTemplate<int, myDefaultTemplate> bar; //error here:      
      return 0;
}

从标准(见 14.3.3 第 1 段 - [temp.arg.template):

模板模板参数的模板参数应是 class 模板的名称,表示为 id-expression。 将模板模板参数与相应参数匹配时,仅考虑主 class 模板; 即使参数列表与模板模板参数的参数列表匹配,也不考虑部分特化。

这意味着模板myDefaultTemplate将仅被视为 2 arguments 模板。 将不考虑默认参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM