Я пытаюсь объединить специализации, чтобы не писать их несколько раз. Например, в приведенном ниже коде я стараюсь специализировать «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’
ошибка относится к первой специализации обув (для " float "и" double. ")
Я не вижу, какую часть C++ я здесь нарушаю - если кто знает эту главу и стих, я был бы признателен. Кроме того, если кто-то знает о другом способе достижения той же цели (повторное использование специализаций для определенных групп типов, без излишне подробного кода), я также был бы признателен за любые предложения!
Я был бы счастлив получить ошибку «неоднозначной спецификации шаблона», если есть многострочные бары с одинаковым объявлением типа. Компилятор действительно имеет всю необходимую ему информацию. Любопытно, что друг сообщает, что эта декларация РАБОТАЕТ на GCC 4.1 на MacOS X. В любом случае - спасибо за ответ и предложенную работу. Похоже, это может сработать для меня! –