|
-1 / 25 / 4
Регистрация: 27.11.2017
Сообщений: 375
|
|
Специализация шаблона функции03.12.2017, 16:07. Показов 4759. Ответов 14
Метки нет (Все метки)
Допустим у нас имеется шаблон функции такой, в угловых скобках которого содержатся как типовые параметры (с ударением на букве И), так и обычные параметры значения.
Возможна ли вообще написать специализацию для данного шаблона. В принципе вопрос можно сформулировать и так: Не является ли наличие параметров значения, указываемых в угловых скобках этого шаблона функции, препятствием для создания специализации этого шаблона?
0
|
|
| 03.12.2017, 16:07 | |
|
Ответы с готовыми решениями:
14
Специализация шаблона функции Частичная специализация шаблона функции Почему не создается специализация шаблона функции |
|
зомбяк
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
|
| 03.12.2017, 16:11 | |
|
Как бы специализация шаблона - это и есть задание иной его реализации для конкретных типов. http://ci-plus-plus-snachala.ru/?p=3937
0
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
| 03.12.2017, 16:12 | |
|
0
|
|
|
-1 / 25 / 4
Регистрация: 27.11.2017
Сообщений: 375
|
||||||||||||
| 03.12.2017, 17:05 [ТС] | ||||||||||||
|
Добавлено через 6 минут Пример вымученный. Вот шаблон:
Вот что выдает компилятор: 1>d:\myprojects\c++\deitla1\deitla1\deit la1.cpp(47): error C2146: синтаксическая ошибка: отсутствие ">" перед идентификатором "n" 1>d:\myprojects\c++\deitla1\deitla1\deit la1.cpp(48): error C2912: явная специализация; "int compare<int,int*>(int *,int *)" не является специализацией функции-шаблона 1>d:\myprojects\c++\deitla1\deitla1\deit la1.cpp(49): error C2065: n: необъявленный идентификатор Компилятор: MS Visual C++ 2017 P.S. Когда убираю все, что связано с целочисленным параметром n из шаблона, специализации и определений, все работает прекрасно.
0
|
||||||||||||
|
зомбяк
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
||
| 03.12.2017, 17:28 | ||
|
Потому что шаблоны пишутся для типов, а не для указателей. Если хочешь использовать указатели - делай для них тип-обёртку
Добавлено через 46 секунд Либо же в самом шаблоне нужно явно указывать указатели. Добавлено через 11 минут А вот классы можно делать с частичной специализацией.
0
|
||
|
-1 / 25 / 4
Регистрация: 27.11.2017
Сообщений: 375
|
|||
| 03.12.2017, 17:31 [ТС] | |||
|
А что указатель уже перестал быть типом? Добавлено через 1 минуту Добавлено через 1 минуту Что значит указывать n явно? Если n убрать оттуда, то это уже будет не специализация, а перегрузка шаблона, или я что то не догоняю.
0
|
|||
|
зомбяк
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
|
| 03.12.2017, 17:34 | |
|
Хотя... Насчёт указателей был неправ, извиняюсь.
0
|
|
|
-1 / 25 / 4
Регистрация: 27.11.2017
Сообщений: 375
|
|
| 03.12.2017, 17:37 [ТС] | |
|
Ну напишите хотя бы одну специализацию для данного шаблона.
Я не прошу тело, напишите хотя бы ЗАГОЛОВОК. Добавлено через 2 минуты Или если это невозможно, то хотелось бы чтобы знающие люди написали просто, примерно следующее: СПЕЦИАЛИЗАЦИЯ ШАБЛОНА ФУНКЦИИ, СОДЕРЖАЩЕГО ПОМИМО ТИПОВЫХ ПАРАМЕТРОВ ШАБЛОНА (С УДАРЕНИЕМ НА БУКВЕ И) ЕЩЁ И ПАРАМЕТРЫ ЗНАЧЕНИЙ НЕВОЗМОЖНА. Так это или нет?
0
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||
| 03.12.2017, 17:38 | |||||||
|
например:
0
|
|||||||
|
-1 / 25 / 4
Регистрация: 27.11.2017
Сообщений: 375
|
|
| 03.12.2017, 17:49 [ТС] | |
|
0
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||
| 03.12.2017, 17:52 | ||
|
нет нужды в полной специализации.
0
|
||
|
-1 / 25 / 4
Регистрация: 27.11.2017
Сообщений: 375
|
||
| 03.12.2017, 17:57 [ТС] | ||
|
Если Вы знаете, что Ваша функция будет всегда вызываться с параметром 10, какой же это тогда параметр? Добавлено через 1 минуту Действительно я нашел в сети такое утверждение, что ЧАСТИЧНАЯ СПЕЦИАЛИЗАЦИЯ ФУНКЦИЙ В ОТЛИЧИЕ ОТ КЛАССОВ ЗАПРЕЩЕНА. Но, хотелось уточнить следующее. Дело в том, что источники, в которых содержатся такое утверждение они 10-летней давности. Может быть что-то поменялось за это время?
0
|
||
|
зомбяк
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
||||||||||||
| 03.12.2017, 18:03 | ||||||||||||
Добавлено через 5 минут Но зато можно определить шаблон с другим числом параметров, т.е. это не будет специализацией:
0
|
||||||||||||
|
-1 / 25 / 4
Регистрация: 27.11.2017
Сообщений: 375
|
||
| 03.12.2017, 18:05 [ТС] | ||
|
Интересует только возможность написать вот так:
Ну а если подытожить, то все это можно описать примерно так: Каждая специализация шаблона должны быть согласована с исходным шаблоном по формату того, что указывается в угловых скобках. Так, например, если в исходном шаблоне, внутри угловых скобок определяется один типовый параметр, то тогда и внутри угловых скобок должен содержаться ровно один тип, а не два и не три. Кроме того, следует помнить о том, что на настоящий момент частичная специализация шаблона функции не допускается. Это означает, что при специализации шаблона функции в определении этой специализации должны указываться значения для всех параметров, которые указаны между угловыми скобками в определении шаблона. Если такой параметр является параметром значения, то для него следует указать конкретное числовое значение. Поправьте, плиз, если ошибаюсь.
0
|
||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||||
| 03.12.2017, 19:05 | ||||||||
|
когда необходимо реализовать какую то уникальную логику для конкретного частной случая. в подобных ситуациях нет никаких "вообще". есть конкретные частные случаи под ключ задачи. пример:
и частный случай: массив с количеством элементов равным ноль.
1
|
||||||||
| 03.12.2017, 19:05 | |
|
Помогаю со студенческими работами здесь
15
Каким стандартом введена частичная специализация шаблона функции? Явная специализация шаблона функции - ошибка на этапе компиляции Error C2912: явная специализация не является специализацией функции-шаблона C2912: специализация функции не является специализацией какого-то конкретного шаблона (в чём причина ошибки?) специализация шаблона Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет
значение производной при заданном х
Логарифм записывается как: (x-2)log(x^2+2) -. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|