スペシャライゼーションを複数回作成しないように、スペシャライゼーションをグループ化しようとしています。たとえば、以下のコードでは、foo :: func()の実装の1つのケースとして、「float」と「double」を特殊化しようとしています。次に、「bool」の別の実装を使用します。
template<typename T> struct foo;
template<typename T> struct bar;
template<> struct bar<float> { typedef float Type; };
template<> struct bar<double> { typedef double Type; };
/* specialize for float and double here */
template<typename T> struct foo<typename bar<T>::Type> {
static void func() { ... }
};
template<> struct foo<bool> {
static void func() { ... }
};
これはGCC4.4.3でエラーになります。(これはターゲットコンパイラです。これは、Ubuntu Server 10.04 LTSの在庫であり、残り3年と言われています。)エラーは次のとおりです。
foo.cpp:8: error: template parameters not used in partial specialization:
foo.cpp:8: error: ‘T’
このエラーは、fooの最初の特殊化(「float」および「double」の場合)を示しています。
ここで違反しているC++の部分がわかりません。章と節を知っている人がいれば、それをいただければ幸いです。また、誰かが同じ目標を達成する別の方法を知っている場合(不必要に冗長なコードを使用せずに、特定のタイプのグループの特殊化を再利用する)、提案をいただければ幸いです。