Я пытаюсь сгруппировать специализации вместе, чтобы не писать их несколько раз. раз. Например, в приведенном ниже коде я пытаюсь выделить "float" и "double" как один из вариантов реализации foo::func(); Затем я использую другую реализацию для "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() { ... }
};
Эта ошибка отсутствует в GCC 4.4.3. (Это целевой компилятор, потому что он стандартный для Ubuntu Server 10.04 LTS, которому якобы осталось жить еще три года.) Ошибка:
foo.cpp:8: error: template parameters not used in partial specialization:
foo.cpp:8: error: ‘T’
Ошибка относится к первой специализации foo (для "float" и "double".)
Я не вижу, какую часть C++ я здесь нарушаю - если кто-нибудь знает глава и стих, я был бы признателен. Кроме того, если кто-то знает другой способ достижения той же цели (повторное использование специализаций для определенных групп типов без излишне подробного кода), я также был бы признателен за любые предложения!