|
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
|
||||||
Экземпляр класса26.05.2020, 01:14. Показов 2301. Ответов 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
|
||||||
|
6352 / 3523 / 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
|
||||||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||
| 26.05.2020, 18:33 | ||
|
Вдобавок, цитатка из Страуструпа.
0
|
||
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,306
|
|||
| 26.05.2020, 18:40 | |||
foo было видно в 2.cpp.Исключением из этого правила являются только явные инстанцирования foo, но в данном примере нет ни одного явного инстанцирования.
0
|
|||
|
248 / 70 / 9
Регистрация: 22.07.2018
Сообщений: 321
|
|
| 26.05.2020, 18:42 | |
|
0
|
|
|
6352 / 3523 / 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
|
|
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
|
| 26.05.2020, 18:57 | |
|
Теперь понял
0
|
|
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,306
|
|||
| 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
|
|
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,306
|
|||||||||||||
| 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
|
|||
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,306
|
||
| 26.05.2020, 19:39 | ||
|
Выполнение "по отдельности и препроцессирования, и компиляции, и ассемблирования, и компоновки" - не более чем деталь реализации.
0
|
||
|
El. Psy. Congroo.
110 / 92 / 32
Регистрация: 09.01.2018
Сообщений: 344
|
|
| 26.05.2020, 19:43 | |
|
Вы сказали, что нет разделения на компиляцию и компоновку, но если я могу отдельно выполнить компиляцию, то это противоречит вашему утверждению.
0
|
|
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,306
|
||
| 26.05.2020, 19:47 | ||
|
0
|
||
|
El. Psy. Congroo.
110 / 92 / 32
Регистрация: 09.01.2018
Сообщений: 344
|
|
| 26.05.2020, 19:49 | |
|
Как компоновка может быть вообще частью языка?
Добавлено через 1 минуту На самом деле, всё это не важно, мы всё равно останемся при своих убеждениях, как бы там ни было, поэтому продолжайте и дальше радоваться ограниченным возможностям C++, а я буду и дальше говнокодить, всего доброго.
0
|
|
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,306
|
|||
| 26.05.2020, 20:53 | |||
|
0
|
|||
| 26.05.2020, 20:53 | |
|
Создание статической функции класса, которая принимает экземпляр этого же класса как объект
Как сделать членом класса экземпляр этого же класса Обращение к методам класса через указатель на экземпляр класса Может ли метод класса возвращать экземпляр этого же класса? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Оказывается, Unreal Engine позволяет качество на порядки выше, чем было в Lineedge
Etyuhibosecyu 05.07.2026
Жаль, конечно, что я не узнал об этом, пока Lineedge существовала, а то бы Noname2331 написал, что волки превращаются в пиксельную кашу, а я бы его попросил скачать какую-нибудь бриллиантовую или Pro. . .
|
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было
ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась.
Первый вариант. . .
|
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2.
Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
|
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет.
Но обычно это 50 лет и более.
Наверное, закисление почвы происходит сезонно в средней. . .
|
|
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
|
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS
Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
|
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи.
Через несколько переработок от PHP кода к C89 (надеюсь, 89).
Но довольно запутанно получилось. Код для Linux.
Но если убрать time и то, что с ним. . .
|
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки
Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
|