Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Явная специализация метода для типа шаблонного класса - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Достать xml из ресурсов http://www.cyberforum.ru/cpp/thread1181000.html
Добрый день, возникла необходимость хранить файл XML в ресурсах. Сохранить я сохранил, но как вытащить его оттуда для последующего применения не разобрался. Помогите пожалуйста. Имеется...
C++ Моделирование непрерывных случайных величин помогите пожалуйста) смоделировать непрерывную случайную величину ξ методом обратных функций и методом отбора. Сравнить эффективности методов по времени моделирования. Оценить математическое... http://www.cyberforum.ru/cpp/thread1180303.html
C++ Прокомментировать строки кода
CRY_IMPLEMENT_GTI(CShotgun, CSingle); BeginReloadLoop(CShotgun *_shotty, int _zoomed): shotty(_shotty), zoomed(_zoomed) {}; CShotgun *shotty; pWep->SetAmmoCount(pAmmoType, ammoCount + refill);...
C++ Эффективное изучение языка программирования
Здравствуйте. Подход к изучению естественных языков, который сейчас вижу во многих языковых школах и сайтах (лингвалео например) - это очень интенсивное заучивание отдельных элементов, конструкций...
C++ Подскажите по исходникам. Как тюнер определяет ноту? http://www.cyberforum.ru/cpp/thread1176476.html
Есть маленькая программа-тюнер для определения ноты http://otuner.sourceforge.net/ Исходники -...
C++ Программа формирования слайд-фильма из файла gif Мужики помогите пожалуйста с программой. Я дуб дубом, незнаю ничего =( Нужна программа формирования слайд-фильма из файла gif. С++ подробнее

Показать сообщение отдельно
Plintus
2 / 2 / 0
Регистрация: 11.01.2011
Сообщений: 16

Явная специализация метода для типа шаблонного класса - C++

19.05.2014, 20:32. Просмотров 615. Ответов 2
Метки (Все метки)

Добрый вечер, уважаемые знатоки!
Хочу задать вопрос по созданию шаблонов. В общем, пусть у меня есть шаблон некоторого класса:
C++
1
2
3
4
5
6
7
template <typename Type> class A
{...
public:
    ...
    A operator*(A& a);
    ...
};
Методы я определяю в том же заголовочном файле, что и класс (как я понял, с шаблонными классами по-другому никак), обычным образом:
C++
1
2
template <typename Type> A<Type> A<Type>::operator*(A<Type>& a)
{ ... }
Всё работает. А теперь я хочу добавить явную специализацию указанного выше метода для типа A<Type>, т.е. для типа, который сам также является шаблонным.

Вот тут начинаются бесконечные бубенные пляски, чтение различных углублённых материалов о шаблонах (ни в одном из найденных мной подобный случай отдельно не рассматривается) - всё это в конце концов ни к чему так и не привело.
Самая адекватная конструкция, которая, на мой взгляд должна здесь получиться, такая:
C++
1
2
template <> template <typename Type> A<A<Type>> A<A<Type>>::operator*(A<A<Type>>& a)
{ ... }
Но в этом случае компилятор выдаёт ошибку:
Код
error C2244: A<Type>::operator *: не удается сопоставить определение функции существующему объявлению
1>          определение
1>          'A<A<Type>> A<A<Type>>::operator *(A<A<Type>> &)'
1>          существующие объявления
1>          'A<A<Type>> A<Type>::operator *(A<A<Type>> &)'
1>          'A<Type> A<Type>::operator *(Type)'
1>          'Type A<Type>::operator *(A<Type> &)'
1>
1>СБОЙ построения.
Будто бы намекает сделать специализацию для всего класса. Но как-то это не правильно, если нужно поменять всего одну функцию. Попробуем изменить определение:
C++
1
2
template <> template <typename Type2> A<A<Type2>> A<Type2>::operator*(A<A<Type2>>& a)
{ ... }
Тут уж совсем комедия какая-то:
Код
error C2244: A<Type>::operator *: не удается сопоставить определение функции существующему объявлению
1>          определение
1>          'A<A<Type2>> A<Type2>::operator *(A<A<Type2>> &)'
1>          существующие объявления
1>          'A<A<Type>> A<Type>::operator *(A<A<Type>> &)'
1>          'A<Type> A<Type>::operator *(Type)'
1>          'Type A<Type>::operator *(A<Type> &)'
1>
1>СБОЙ построения.
В общем, свои мысли заканчиваются, осталось надеяться, что кто-то с таким сталкивался и может подсказать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru