2 / 2 / 0
Регистрация: 31.03.2018
Сообщений: 60
1

Явная специализация

02.03.2019, 21:19. Показов 1137. Ответов 5
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// Выдержка из книги Стивен прата С++
 
// В следующем примере первый вызов функции Swap() использует обобщенный шаблон,
// а второй вызов явную специализацию, основанную на типе job:
...
template <class T>  // шаблон
void Swap( T &, T &); 
 
// Явная специализация для типов job
template <> void Swap<job>(job &, job &);
 
int main()
{
   double u, v;
   ...
   Swap(u,v);     // используется шаблон
   int a, b;
   ...
   Swap(a,b);    // используется void Swap<job>(job &, job &)
}
 
// как так, это ошибка в книге или что? какая разница int или double, явная специализация приоритетней в данном случае в 
// обоих приведенных примерах
Добавлено через 2 минуты
Помогите пожалуйста, я до классов еще не дошел, застрял тут немного, гугл не спасает, я понял как работает шаблон, а вот с специализированным что то туплю((
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.03.2019, 21:19
Ответы с готовыми решениями:

явная специализация
нужно реализовать специализацию по шаблону. Специализация должна принимать массив строк, и вернуть...

Явная специализация
Здрасти, Народ. Подскажите плз в чем преимущество явной специализации перед перед обычным...

Явная специализация класса
Код переписан из книги, однако не компилируется. Что не так со специализацией класса? // Явная...

Явная специализация шаблонов
В явной специализации мы можем задать поведение функции для конкретного типа данных. Мне например...

5
Don't worry, be happy
17758 / 10526 / 2030
Регистрация: 27.09.2012
Сообщений: 26,502
Записей в блоге: 1
02.03.2019, 21:22 2
Цитата Сообщение от Араик Расоян Посмотреть сообщение
как так, это ошибка в книге или что?
Скорее всего опечатка, и должно быть
C++
1
job a, b;//<-- job, а не int
но нужно знать что такое job.
1
2 / 2 / 0
Регистрация: 31.03.2018
Сообщений: 60
02.03.2019, 21:25  [ТС] 3
я молюсь на этот форум, вы мои боги...

Добавлено через 51 секунду
job в данном котексте тип структуры
0
Don't worry, be happy
17758 / 10526 / 2030
Регистрация: 27.09.2012
Сообщений: 26,502
Записей в блоге: 1
02.03.2019, 21:27 4
Араик Расоян, я уже писал, что в пятом издании книги Прата много опечаток. В шестом поправили, но в русском переводе шестого издания многие опечатки остались. Не знаю, есть ли более новые издания.
0
610 / 415 / 151
Регистрация: 11.01.2019
Сообщений: 1,745
02.03.2019, 21:47 5
Цитата Сообщение от Араик Расоян Посмотреть сообщение
Помогите пожалуйста, я до классов еще не дошел, застрял тут немного, гугл не спасает, я понял как работает шаблон, а вот с специализированным что то туплю((
Специализация работает "в обратном направлении". Шаблон обобщает, специализация, наоборот, конкретизирует. Когда общий алгоритм работы шаблона для какого-либо конкретного типа не подходит, то делают специализацию. Она может быть полной или частичной.
1
Комп_Оратор)
Эксперт по математике/физике
8725 / 4472 / 600
Регистрация: 04.12.2011
Сообщений: 13,354
Записей в блоге: 16
02.03.2019, 22:32 6
Араик Расоян, книга с большими претензиями, но очень глюкавая. Данный пример - классика жанра. Причём применение структуры явно надумано. Это можно было показать на пальцах обычных интах. То есть, если у вас есть имя не шаблонной функции с аргументами int и есть параметризованная на обобщённом типе, то вызов с явным указанием int без шаблонных скобок вызовет первую, а со скобками вынудит инстианцировать шаблон (на той же паре параметров). Почему паре кстати! Этоможно было на одном параметре показать. И не смотря на искусственную запутанность и надуманность, автор и здесь делает ошибку... Эта книга не оставила меня равнодушным. Выброшенные деньги.
Вот пример на пальцах:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
using namespace std;
void Swp(int a, int b){cout<<"\nvoid Swp(int a, int b)"<<endl;}
 
template <typename T> void Swp(T,T)
{
cout<<"\ntemplate struct<typename T> void Swp<T,T>"<<endl;
}
 
template<>void Swp(int, int)
{
cout<<"\ntemplate<>void Swp(int, int)"<<endl;
}
int main(int argc, char* argv[])
{
int a=1,b=1;
Swp(a,b);
Swp<>(a,b);
cout<<endl;
cin.get();
return 0;
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.03.2019, 22:32
Помогаю со студенческими работами здесь

Шаблоны. Явная специализация
Имеется код: #include &lt;iostream&gt; template &lt; typename T &gt; void func( T var ) { std::cout...

Явная специализация шаблона
Здравствуйте, подскажите, пожалуйста, почему не выполняется неявное приведение фактических...

Явная специализация шаблона
Столкнулся с проблемой при изучении шаблонов. Задача: написать шаблонную функцию, которая...

Явная специализация шаблона
Здравствуйте. Не совсем разобрася с сабжем. Например, если есть кусочек кода: template &lt;typename...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru