|
8 / 7 / 1
Регистрация: 13.06.2017
Сообщений: 56
|
||||||
Перегрузка оператора у вложенного класса шаблона25.04.2020, 01:06. Показов 2944. Ответов 22
Метки нет (Все метки)
Я объявляю шаблонный класс A и хочу иметь в нем вложенный класс B, к которому будет применим бинарный плюс следующим образом:
Какой должна быть сигнатура перегрузки чтобы это заработало?
0
|
||||||
| 25.04.2020, 01:06 | |
|
Ответы с готовыми решениями:
22
Перегрузка оператора- для шаблона класса Перегрузка оператора << для шаблона Перегрузка оператора >> для дочернего класса от базового виртуального класса |
|
Гвоздь Задиров
1719 / 1118 / 337
Регистрация: 25.01.2019
Сообщений: 2,946
|
|
| 25.04.2020, 01:19 | |
|
0
|
|
|
8 / 7 / 1
Регистрация: 13.06.2017
Сообщений: 56
|
||||||
| 25.04.2020, 01:23 [ТС] | ||||||
|
В контексте данного примера я пытаюсь вызвать перегрузку + у int и A<int>::B, изначально у меня был шаблонный класс контейнер к которому нужно было сделать итератор с арифметикой, я упростил до такого состояния.
Если явно вызывать оператор то это работает:
0
|
||||||
|
87 / 87 / 18
Регистрация: 11.06.2018
Сообщений: 302
|
||||||
| 25.04.2020, 01:46 | ||||||
|
Zegors,
2
|
||||||
|
8 / 7 / 1
Регистрация: 13.06.2017
Сообщений: 56
|
|
| 25.04.2020, 01:51 [ТС] | |
|
ablex, Мне бы не хотелось во первых нарушать инкапсуляцию, во вторых хотелось бы отделять объявление от определения, т. е. объявлять за пределами класса, такая сигнатура единственно возможная?
0
|
|
|
87 / 87 / 18
Регистрация: 11.06.2018
Сообщений: 302
|
|||
| 25.04.2020, 02:03 | |||
Сообщение было отмечено Zegors как решение
РешениеПрежде чем рассуждать дальше, предлгаю все-таки сперва разобраться, почему ваш вариант не работоспособен. https://stackoverflow.com/a/25245676 Если останутся вопросы по материалу по ссылке, задавайте их тут.
2
|
|||
|
8 / 7 / 1
Регистрация: 13.06.2017
Сообщений: 56
|
||
| 25.04.2020, 02:25 [ТС] | ||
|
ablex, Спасибо, я и подумать не мог что нельзя вывести тип из такой очевидной ситуации)
0
|
||
|
87 / 87 / 18
Регистрация: 11.06.2018
Сообщений: 302
|
||
| 25.04.2020, 02:28 | ||
|
0
|
||
|
8 / 7 / 1
Регистрация: 13.06.2017
Сообщений: 56
|
|
| 25.04.2020, 02:32 [ТС] | |
|
ablex, "казалось бы очевидной ситуации"
0
|
|
|
87 / 87 / 18
Регистрация: 11.06.2018
Сообщений: 302
|
|||
| 25.04.2020, 03:19 | |||
friend раскроет слишком много деталей реализации класса B для оператора+, то нужно воспринимать это как маркер для сомнений в верности изначальной постановки о вложенности B в шаблон.Но до тех пор, пока мы разговариваем в абстрактных B - A что-то осмысленное предложить невозможно. Но можете считать, что лакмусовая бумажка сработала. Думайте в сторону изменения архитектуры.T из контекста, который зависит от T. Поясняю. B - зависимое имя шаблона, т.е. это B - зависит от T, но вы хотите чтобы T вывелось из B. Причинно-следственные связи нарушены. Логика не работает. Конкретно компилятор и C++ глобально здесь и не при чем, скорее законы природы.
1
|
|||
|
Вездепух
12938 / 6805 / 1821
Регистрация: 18.10.2014
Сообщений: 17,226
|
||
| 25.04.2020, 04:50 | ||
|
К сожалению язык С++ не предоставляет других способов определения таких функций. Только как friend, и только с определением прямо в теле класса.
1
|
||
|
Комп_Оратор)
|
||||||
| 25.04.2020, 10:37 | ||||||
|
Zegors, я вот тоже не понимаю, почему литерал 1 не воспринимается как тип int... Однако, если задать тип первого слагаемого как шаблонный параметр то вывод проходит успешно:
![]() Это для MinGW) Утверждения вроде того, что де такова судьба, исходя из того, что на то воля божья, не успокаивают.
0
|
||||||
|
Вездепух
12938 / 6805 / 1821
Регистрация: 18.10.2014
Сообщений: 17,226
|
||||
| 25.04.2020, 11:34 | ||||
T через первый аргумент функции, именно пользуясь вашим же "литерал 1 воспринимается как тип int".
0
|
||||
|
Комп_Оратор)
|
||||||
| 25.04.2020, 11:51 | ||||||
|
Посмотрел вопрос по ссылке на stack overflow и не увидел убедительных объяснений. Я дополнил его вызовом с "подсказкой" - явным инстанцированием. Этот вызов работает.
![]() Пишу по памяти - не взыщите. Однако там вопрос шире, в том смысле, что может вызываться построение менее подходящего инстанса. *Тут попутно, снова есть какой-то раздосадованный шум. Я обещал, что не буду реагировать на бессмысленные с недоуменно грубым оттенком выбросы и я не буду.
0
|
||||||
| 25.04.2020, 12:12 | |
|
0
|
|
| 25.04.2020, 12:18 | |||
|
Не по теме:
Я к вашим выбросам уже привык.
0
|
|||
| 25.04.2020, 12:20 | ||||||
|
Не по теме: IGPIGP, Кликните здесь для просмотра всего текста
0
|
||||||
|
Вездепух
12938 / 6805 / 1821
Регистрация: 18.10.2014
Сообщений: 17,226
|
||||
| 25.04.2020, 12:31 | ||||
|
Не по теме:
Добавлено через 7 минут
0
|
||||
|
Комп_Оратор)
|
|
| 25.04.2020, 13:01 | |
|
zayats80888, отличный пример, кстати. Он же о том же. Компилятор не желает искать, если "трудновато".
Что касается типа из литерала - то это была литература. Я пробовал и именованные переменные до того. Я это написал в то смысле, что и ежику понятно что он int. И далее я привёл пример, где инстанс компилируется именно по "литералу". Который не даёт тут покоя товарищу, который не даёт покоя мне.
0
|
|
|
Вездепух
12938 / 6805 / 1821
Регистрация: 18.10.2014
Сообщений: 17,226
|
||
| 25.04.2020, 15:16 | ||
|
Как при этом было ясно сказано, проблема non-deduced context не имеет абсолютно никакого отношения ни к каким типам литералов int, независимо от того, понятны эти типы ёжикам или нет.
0
|
||
| 25.04.2020, 15:16 | |
|
Помогаю со студенческими работами здесь
20
Перегрузка оператора << шаблонного класса Перегрузка оператора = в шаблоне класса
Перегрузка оператора -> для шаблонного класса
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&d=1772460536
Одним из. . .
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
|
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|