|
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
|
||||||
Экземпляр класса26.05.2020, 01:14. Показов 2352. Ответов 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
|
||||||
|
6353 / 3524 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
||||
| 26.05.2020, 18:22 | ||||
|
Инстанцировать в 1.cpp не получится, т.к. не видно реализации.
0
|
||||
|
248 / 70 / 9
Регистрация: 22.07.2018
Сообщений: 321
|
||||||
| 26.05.2020, 18:29 | ||||||
![]()
0
|
||||||
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
||
| 26.05.2020, 18:33 | ||
|
Вдобавок, цитатка из Страуструпа.
0
|
||
|
Вездепух
13211 / 6844 / 1824
Регистрация: 18.10.2014
Сообщений: 17,314
|
|||
| 26.05.2020, 18:40 | |||
foo было видно в 2.cpp.Исключением из этого правила являются только явные инстанцирования foo, но в данном примере нет ни одного явного инстанцирования.
0
|
|||
|
248 / 70 / 9
Регистрация: 22.07.2018
Сообщений: 321
|
|
| 26.05.2020, 18:42 | |
|
0
|
|
|
6353 / 3524 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
||
| 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
|
|
|
6353 / 3524 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
|
| 26.05.2020, 18:57 | |
|
Теперь понял
0
|
|
|
Вездепух
13211 / 6844 / 1824
Регистрация: 18.10.2014
Сообщений: 17,314
|
|||
| 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
|
|
|
Вездепух
13211 / 6844 / 1824
Регистрация: 18.10.2014
Сообщений: 17,314
|
|||||||||||||
| 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
|
|||
|
Вездепух
13211 / 6844 / 1824
Регистрация: 18.10.2014
Сообщений: 17,314
|
||
| 26.05.2020, 19:39 | ||
|
Выполнение "по отдельности и препроцессирования, и компиляции, и ассемблирования, и компоновки" - не более чем деталь реализации.
0
|
||
|
El. Psy. Congroo.
110 / 92 / 32
Регистрация: 09.01.2018
Сообщений: 344
|
|
| 26.05.2020, 19:43 | |
|
Вы сказали, что нет разделения на компиляцию и компоновку, но если я могу отдельно выполнить компиляцию, то это противоречит вашему утверждению.
0
|
|
|
Вездепух
13211 / 6844 / 1824
Регистрация: 18.10.2014
Сообщений: 17,314
|
||
| 26.05.2020, 19:47 | ||
|
0
|
||
|
El. Psy. Congroo.
110 / 92 / 32
Регистрация: 09.01.2018
Сообщений: 344
|
|
| 26.05.2020, 19:49 | |
|
Как компоновка может быть вообще частью языка?
Добавлено через 1 минуту На самом деле, всё это не важно, мы всё равно останемся при своих убеждениях, как бы там ни было, поэтому продолжайте и дальше радоваться ограниченным возможностям C++, а я буду и дальше говнокодить, всего доброго.
0
|
|
|
Вездепух
13211 / 6844 / 1824
Регистрация: 18.10.2014
Сообщений: 17,314
|
|||
| 26.05.2020, 20:53 | |||
|
0
|
|||
| 26.05.2020, 20:53 | |
|
Создание статической функции класса, которая принимает экземпляр этого же класса как объект
Как сделать членом класса экземпляр этого же класса Обращение к методам класса через указатель на экземпляр класса Может ли метод класса возвращать экземпляр этого же класса? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|
|
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
|
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701
Купил два термопринтера QR701.
На сэлф-тесте написано:
Language: PC936 (GB18030).
Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
|
Создание формы заимствованного документа
Maks 03.08.2026
Задача:
Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также
табличная часть со следующими реквизитами:
- Расчетный счет покупателя. . .
|
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача:
В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
|