1 / 1 / 0
Регистрация: 06.12.2012
Сообщений: 9
|
|||||||||||
1 | |||||||||||
Явная специализация31.12.2012, 15:38. Показов 1438. Ответов 6
Метки нет (Все метки)
Здрасти, Народ.
Подскажите плз в чем преимущество явной специализации перед перед обычным применением перегруженной функции. Привожу код: 1)
В чем же цимус явной специализации перед обычной перегрузкой??? PS прошу прощения за коряво поданный вопрос.
0
|
31.12.2012, 15:38 | |
Ответы с готовыми решениями:
6
явная специализация Явная специализация Явная специализация шаблона Явная специализация шаблонов |
~ Эврика! ~
1256 / 1005 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
|
31.12.2012, 16:03 | 2 |
Перегруженная нешаблонная функция задаёт полный и исчерпывающий перечень типов, для которых она реализована. Если вы перегрузите нешаблонную swap для int, job и bork, то только эти типы она и сможет принимать.
Явная специализация шаблонной функции задаёт полный и исчерпывающий список типов, для которых функция будет вести себя не так, как написано в шаблоне. Если вы специализируете шаблонную swap для int, job и bork, то только для этих типы она будет вести себя так, как написано в специализациях, а для остальных — как написано в шаблоне.
0
|
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
|
|
31.12.2012, 16:07 | 3 |
Warbit, я бы сказал так - для единообразия в коде.
Представьте, что у вас в коде есть шаблон и вместо явной его специализации была написана перегруженная функция с таким же именем. Затем по каким-то причинам вам нужно поменять что-то в шаблоне - имя, типы параметров, саму логику внутри. Вы в шаблоне все поменяли, а про перегруженную функцию забыли. Причем компилятор на это ругаться не будет. Соответственно, это может стать причиной ошибок. Поэтому если используете шаблоны - используйте их полноценно.
0
|
31.12.2012, 22:37 | 4 |
В данном случае специализация не нужна ... достаточно перегрузить оператор присвоения, для корректного обмена
(в случае наличия например динамических объектов в структуре)
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
01.01.2013, 12:27 | 5 |
Преимущество шаблонов в том, что если текст функции совпадет во всех перегруженных версиях, а различаются только типы данных, с которыми выполняются одни и те же операции, то можно во-первых съэкономить размер текста за счёт одного экземпляра текста функции, а во-вторых застраховаться от ошибок при изменении поведения сразу всех функций: менять то тоже надо один экземпляр и невозможно забыть исправить один экземпляр из десяти. Других преимуществ шаблоны не имеют, они лишь позволяют реализовать единобезобразие ровно один раз и не мучаться, но компилятор создаст те же самые перегруженные версии функции с идентичным текстом и аналогичные друг другу классы.
0
|
1 / 1 / 0
Регистрация: 06.12.2012
Сообщений: 9
|
|
02.01.2013, 18:56 [ТС] | 6 |
меня просто интересует, есть ли такой случай, когда пригодилась бы именно явная специализация, а не явная перегрузка функции. Из учебной литературы я я таких примеров не нашел.
0
|
~ Эврика! ~
1256 / 1005 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
|
02.01.2013, 19:19 | 7 |
Почти всё шаблонная магия основывается на частичной специализации, например.
Ну и опять повторюсь: если алгоритм реализуется "для всего, что можно", но для некоторых по-другому, то это частичная специализация. Если только для некоторых типов и только для них, то это перегрузка. Банальный пример "для всего, что можно, но для некоторых по-другому": изменение размеров каких-нибудь векторов. POD-типы можно просто memcpy() скопировать, а все остальные надо копировать/перемещать через соответствующие конструкторы.
0
|
02.01.2013, 19:19 | |
02.01.2013, 19:19 | |
Помогаю со студенческими работами здесь
7
Явная специализация шаблона Явная специализация шаблона Явная специализация класса Явная специализация шаблонов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |