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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Достать xml из ресурсов http://www.cyberforum.ru/cpp/thread1181000.html
Добрый день, возникла необходимость хранить файл XML в ресурсах. Сохранить я сохранил, но как вытащить его оттуда для последующего применения не разобрался. Помогите пожалуйста. Имеется следующее: //Здесь я получаю из ресурса необходимый файл. HMODULE hMod=GetModuleHandle(NULL); HRSRC res_info = FindResource(hMod, MAKEINTRESOURCE(IDR_XML_HANDLE), _T("XML")); size_t sz =...
C++ Моделирование непрерывных случайных величин помогите пожалуйста) смоделировать непрерывную случайную величину ξ методом обратных функций и методом отбора. Сравнить эффективности методов по времени моделирования. Оценить математическое ожидание, дисперсию. Построить гистограмму плотности распределения, сравнить по критерию http://www.cyberforum.ru/cgi-bin/latex.cgi?\chi квадрат эмпирическое и теоретическое распределения. Параметр А... 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); pWep->SetInventoryAmmoCount(pAmmoType, pWep->GetInventoryAmmoCount(pAmmoType) - refill); CActor* pOwner = m_pWeapon->GetOwnerActor(); Помогите пожалуйста что эти коды означают
C++ Эффективное изучение языка программирования
Здравствуйте. Подход к изучению естественных языков, который сейчас вижу во многих языковых школах и сайтах (лингвалео например) - это очень интенсивное заучивание отдельных элементов, конструкций и концепций и постоянная тренировка навыков комбинирования всего этого на реальных примерах. Похожий подход применяют сетевики для изучения языков конфигурирования оборудования. Отсюда вопрос:...
C++ Подскажите по исходникам. Как тюнер определяет ноту? http://www.cyberforum.ru/cpp/thread1176476.html
Есть маленькая программа-тюнер для определения ноты http://otuner.sourceforge.net/ Исходники - http://sourceforge.net/projects/otuner/files/otuner/latest/oTuner_Source_Code_for_Programmers.zip/download Подскажите, в каком месте происходит анализ услышанного звука? После преобразования Фурье FFT получают спектр частот. Как потом в нём ищут нужные частоты?
C++ Программа формирования слайд-фильма из файла gif Мужики помогите пожалуйста с программой. Я дуб дубом, незнаю ничего =( Нужна программа формирования слайд-фильма из файла gif. С++ подробнее

Показать сообщение отдельно
Plintus
2 / 2 / 0
Регистрация: 11.01.2011
Сообщений: 16
19.05.2014, 20:32     Явная специализация метода для типа шаблонного класса
Добрый вечер, уважаемые знатоки!
Хочу задать вопрос по созданию шаблонов. В общем, пусть у меня есть шаблон некоторого класса:
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>СБОЙ построения.
В общем, свои мысли заканчиваются, осталось надеяться, что кто-то с таким сталкивался и может подсказать.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 00:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru