パラメータがすべてわかっている場合、内部テンプレートを特殊化するのに問題があります。次に例を示します。
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; };
これは失敗すると予想していましたが、エラー メッセージは驚くべきものではありません。それは「テンプレートパラメータリストが少なすぎる」でした。
それで、これを行う正しい方法は何ですか?もちろん、ハッキングすることもできますが、その必要がなければ、したくありません。