我在特化已知参数的内部模板时遇到了问题。以下是一个示例:
template < typename T0 >
struct outer
{
template < typename T1 = void, typename T2 = void >
struct inner
{
typedef T1 type;
};
};
template < typename T0 >
template < typename T1 >
struct outer<T0>::inner<double,T1> { typedef int type; };
这个很正常。如果我将内部模板指定为以下方式,则不起作用:
template < typename T0 >
template < >
struct outer<T0>::inner<double,void> { typedef int type; };
对于这个问题,我得到了错误信息:“在‘>’标记之前无效的显式特化……未显式特化封闭类模板……未在偏特化中使用模板参数:……T0”。不确定发生了什么。
我还尝试了以下方法:
template < typename T0 >
struct outer<T0>::inner<double,void> { typedef int type; };
我预料到这个会失败,错误信息并不令人惊讶。它是:"too few template-parameter-lists"。
那么,正确的做法是什么?当然,我可以绕过它,但如果不必要,我宁愿不这样做。