以下编译在g ++中没有问题:
template<typename ReturnType = double, typename OtherType> ReturnType func(const OtherType& var)
{
ReturnType result = 0;
/* SOMETHING */
return result;
}
所有符合标准的编译器在默认模板参数(此处为OtherType
)之后是否可以使用非默认模板参数(ReturnType
)?
答案 0 :(得分:9)
这很复杂。从C ++ 11规范:
如果类模板的模板参数具有默认模板参数,则每个后续模板参数应具有提供的默认模板参数或者是模板参数包。如果主类模板的模板参数是模板参数包,则它应该是最后一个模板参数。 [注意:这些不是函数模板或类模板部分特化的要求,因为可以推导出模板参数(14.8.2)。
所以你要做的是不允许上课,除非它是部分专业化。但是对于功能来说还可以。
因此,只要您在示例中显示的功能只是这样做,就可以了。你不能将它概括为类模板。