当它的参数都是已知的时,我无法专门化一个内部模板。这是一个例子:
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”。不确定 WTAF 是否在这里进行。
我也试过这个:
template < typename T0 >
struct outer<T0>::inner<double,void> { typedef int type; };
我预计这会失败,错误消息并不奇怪。它是:“模板参数列表太少”。
那么,这样做的正确方法是什么?我当然可以破解它,但如果我不必这样做,我宁愿不要。