Шаблоны. Специализация

164
26 февраля 2018, 01:55

Верные ли утверждения: 1. Полная специализация есть для функций и классов 2. Частичная специализация есть исключительно для классов 3. Для функций роль частичной специализации выполняет механизм перегрузки 4. Частичная специализация для классов есть аналогия перегрузки для функций

Answer 1

1 и 2 - верно. 3 и 4 - слишком нечеткие формулировки, чтобы можно было дать однозначные ответы. По-видимому, авторами этих вопросов подразумевалось "да" в качестве правильного ответа, но если задаться целью, то можно привести контрпримеры.

Для вопроса 3: перегрузка и специализация - фундаментально разные по своей сути механизмы. Я не вижу причин стараться привести их к некоему "общему знаменателю".

Перегрузка функций (или шаблонов функций) создает набор равноправных функций (или шаблонов функций), которые все одновременно и равноправно участвуют в процессе разрешения перегрузки (overload resolution). Среди них выбирается единственный лучший кандидат, если таковой удается выбрать.

Специализация шаблонов функций ведет себя совсем по-другому. Специализации (как полные, так и частичные) являются "гражданами второго сорта" и изначально не допускаются до overload resolution. Их всех там представляет лишь главный (неспециализированный) шаблон. И только если главный шаблон победит, в рассмотрение принимаются его специализации.

Для вопроса 4: тут уж я совсем не вижу зачем пытаться представить специализацию классов как аналог перегрузки функций. Чисто неформально, для улучшения понимания, такое утверждение можно сделать. Но вот вопроса с ответом "да/нет" тут никак не получается. Возможность дедукции аргументов шаблона класса в С++17 действительно усиливает внешнее сходство шаблонов классов с шаблонами функцией, но это сходство все равно лишь поверхностно.

READ ALSO
Сортировка Шелла

Сортировка Шелла

Преподаватель сказал, что строка for (int j = i - step; j >= 0; j = j - step) портит всю суть сортировки Шелла и сказал переделать таким образом, чтобы использовать...

142
Размер buffer`а

Размер buffer`а

Использую следующий код:

161
Установка Parallel STL на Ububtu 16.04

Установка Parallel STL на Ububtu 16.04

Здравствуйте, подскажите, пожалуйста, как установить Parallel STL на Ubuntu 1604 пробовал по инструкциям от сюда https://software

131