|
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
|
||||||
Экземпляр класса26.05.2020, 01:14. Показов 2517. Ответов 58
Метки нет (Все метки)
Почему при создании экземпляра шаблона класса компилятором синтаксис такой странный?
0
|
||||||
| 26.05.2020, 01:14 | |
|
Ответы с готовыми решениями:
58
|
|
El. Psy. Congroo.
110 / 92 / 32
Регистрация: 09.01.2018
Сообщений: 344
|
||||||
| 26.05.2020, 18:18 | ||||||
|
Суть как раз таки в том, чтобы избежать неявного инстанцирования. И не скомпилируется, а скомпонуется.
Добавлено через 4 минуты И зачем использовать такой костыль, если можно сделать так?
0
|
||||||
|
6354 / 3525 / 1428
Регистрация: 07.02.2019
Сообщений: 9,008
|
||||
| 26.05.2020, 18:22 | ||||
|
Инстанцировать в 1.cpp не получится, т.к. не видно реализации.
0
|
||||
|
248 / 70 / 9
Регистрация: 22.07.2018
Сообщений: 321
|
||||||
| 26.05.2020, 18:29 | ||||||
![]()
0
|
||||||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||
| 26.05.2020, 18:33 | ||
|
Вдобавок, цитатка из Страуструпа.
0
|
||
|
Вездепух
13235 / 6867 / 1827
Регистрация: 18.10.2014
Сообщений: 17,407
|
|||
| 26.05.2020, 18:40 | |||
foo было видно в 2.cpp.Исключением из этого правила являются только явные инстанцирования foo, но в данном примере нет ни одного явного инстанцирования.
0
|
|||
|
248 / 70 / 9
Регистрация: 22.07.2018
Сообщений: 321
|
|
| 26.05.2020, 18:42 | |
|
0
|
|
|
6354 / 3525 / 1428
Регистрация: 07.02.2019
Сообщений: 9,008
|
||
| 26.05.2020, 18:51 | ||
foo находится в 2.cpp. Это просто обёртка, чтобы бы в 2.cpp вызвать function (инстанцировать function)
0
|
||
|
248 / 70 / 9
Регистрация: 22.07.2018
Сообщений: 321
|
|
| 26.05.2020, 18:54 | |
|
1
|
|
|
6354 / 3525 / 1428
Регистрация: 07.02.2019
Сообщений: 9,008
|
|
| 26.05.2020, 18:57 | |
|
Теперь понял
0
|
|
|
Вездепух
13235 / 6867 / 1827
Регистрация: 18.10.2014
Сообщений: 17,407
|
|||
| 26.05.2020, 19:03 | |||
1.cpp и 2.cpp являлся корректной программой, определение шаблона функции foo должно целиком присутствовать и в 1.cpp, и в 2.cpp. Также 1.cpp обязан содержать объявление явной специализации, выполненной в 2.cpp.Без этого любая "компилируемость" этого кода - не более чем случайность, пролезшая через дыры "no diagnostic is required". Добавлено через 4 минуты foo - это шаблон функции. В С++ полное определение шаблона функции должно быть видно во всех точках, в которых он используется - то жесткое требование языка. Исключением из этого правила, как я уже сказал выше, являются только явные инстанцирования шаблона (которых в данном примере нет).
1
|
|||
|
El. Psy. Congroo.
110 / 92 / 32
Регистрация: 09.01.2018
Сообщений: 344
|
||
| 26.05.2020, 19:15 | ||
|
Где вы видите в моём коде - foo? Если определение должно быть везде, то в таком случае, явное инстанцирование не должно существовать. Да и честно, вы несёте какую-то ахинею, вы же понимаете, что если в 1.cpp будет определение шаблона, то в 2.cpp не будет никакого смысла? Более того, в 1.cpp может и вовсе не быть никаких объявлений шаблона, это никак не помешает осуществить доступ к этим функциям. Сколько можно, компилятор здесь вообще не при чём, он взаимодействует с ссылками на неопределённые имена, ему вообще без разницы - есть определение, нету, всё одно. Связывание интерфейса с реализацией осуществляется компоновщиком. Так что перестаньте, пожалуйста, утрировать.
Добавлено через 46 секунд Вы потерялись? foo - не шаблон. Добавлено через 2 минуты
0
|
||
| 26.05.2020, 19:20 | |
|
0
|
|
|
Вездепух
13235 / 6867 / 1827
Регистрация: 18.10.2014
Сообщений: 17,407
|
|||||||||||||
| 26.05.2020, 19:32 | |||||||||||||
function.2.cpp есть конкретный и очевидный смысл - он содержит определение явной специализации function для случая T == int. Это определение должно существовать в единственном экземпляре во всей программе. Именно ради него и существует 2.cpp.Без этой явной специализации 2.cpp действительно не имел бы никакого смысла.Однако, еще раз, эта явная специализация обязательно должна быть объявлена в 1.cpp
1.cpp тоже знал, что такая специализация где-то существует. Без этого программа некорректна.Добавлено через 9 минут
0
|
|||||||||||||
|
El. Psy. Congroo.
110 / 92 / 32
Регистрация: 09.01.2018
Сообщений: 344
|
|||
| 26.05.2020, 19:34 | |||
|
0
|
|||
|
Вездепух
13235 / 6867 / 1827
Регистрация: 18.10.2014
Сообщений: 17,407
|
||
| 26.05.2020, 19:39 | ||
|
Выполнение "по отдельности и препроцессирования, и компиляции, и ассемблирования, и компоновки" - не более чем деталь реализации.
0
|
||
|
El. Psy. Congroo.
110 / 92 / 32
Регистрация: 09.01.2018
Сообщений: 344
|
|
| 26.05.2020, 19:43 | |
|
Вы сказали, что нет разделения на компиляцию и компоновку, но если я могу отдельно выполнить компиляцию, то это противоречит вашему утверждению.
0
|
|
|
Вездепух
13235 / 6867 / 1827
Регистрация: 18.10.2014
Сообщений: 17,407
|
||
| 26.05.2020, 19:47 | ||
|
0
|
||
|
El. Psy. Congroo.
110 / 92 / 32
Регистрация: 09.01.2018
Сообщений: 344
|
|
| 26.05.2020, 19:49 | |
|
Как компоновка может быть вообще частью языка?
Добавлено через 1 минуту На самом деле, всё это не важно, мы всё равно останемся при своих убеждениях, как бы там ни было, поэтому продолжайте и дальше радоваться ограниченным возможностям C++, а я буду и дальше говнокодить, всего доброго.
0
|
|
|
Вездепух
13235 / 6867 / 1827
Регистрация: 18.10.2014
Сообщений: 17,407
|
|||
| 26.05.2020, 20:53 | |||
|
0
|
|||
| 26.05.2020, 20:53 | |
|
Создание статической функции класса, которая принимает экземпляр этого же класса как объект
Как сделать членом класса экземпляр этого же класса Обращение к методам класса через указатель на экземпляр класса Может ли метод класса возвращать экземпляр этого же класса? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Реализация из решения ниже выполнена в самописной конфигурации на БСП (помощь начинающему коллеге).
Задача:
Программно добавить префикс в нумерацию документов.
Решение:
В модуле объекта. . .
|
После закрытия оутлука продолжает висеть процесс в диспетчере задач
Maks 27.10.2026
С недавнего времени в продакшене возникла проблема: при закрытии оутлука в диспетчере задач продолжал висеть процесс outlook. exe. Проблема возникла после установки MS Office 2021 LTSC на машинах, под. . .
|
Baragoz - DPS/HPS бот для WoW 3.3.5a, многоязычный
AmbA 26.10.2026
Хотите ещё ботов? У меня есть один! А я пока отдохну от него.
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=12062&stc=1&d=1793007952
Инструкция внутри.
https:/ / youtu. be/ VpfFZSUDGnQ. . .
|
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности.
Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
|
|
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version
Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
|
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер
На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
|
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/
TL DR
Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|