6 / 6 / 2
Регистрация: 29.03.2012
Сообщений: 101
|
||||||
1 | ||||||
Перегрузка оператора == и шаблоны08.03.2019, 15:14. Показов 1749. Ответов 17
Метки шаблоны кода (Все метки)
Почему присутствие структуры Hard Logic приводит к ошибке компиляции, а структуры SoftLogic — нет?
0
|
08.03.2019, 15:14 | |
Ответы с готовыми решениями:
17
Перегрузка оператора [] и шаблоны. Шаблоны и дружественность. Перегрузка оператора << через дружественную функцию в шаблоне Перегрузка и шаблоны Перегрузка операторов и шаблоны |
1659 / 488 / 106
Регистрация: 17.05.2015
Сообщений: 1,497
|
||||||
08.03.2019, 15:29 | 2 | |||||
Потому что у вас компилятор от вижуал студии)))
Ошибка себя проявит сразу же, как только вы попытаетесь инстанцировать шаблон:
1
|
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
|
|
08.03.2019, 15:29 | 3 |
Сообщение было отмечено HelloWorld56 как решение
Решение
HelloWorld56, потому что SoftLogic - это не структура, а шаблон структуры. Ошибка будет только если к коде появится инстанцирование функции SoftLogic<T>::compare, т.е. появится потребность в конкретной реализации, как в случае с HardLogic::compare.
2
|
Комп_Оратор)
|
|
08.03.2019, 15:41 | 4 |
HelloWorld56, SFINAE это то, что работает только если находится наиболее близкое соответствие. Если оно вообще не ищется - компилятор полностью игнорит шаблон. А не шаблонный метод генерируется, даже если нет вызова. Хотя это может быть вопросом реализаций, ключей, оптимизаций и пр. ктулхуазмов.
eva2326, с праздником!
0
|
1659 / 488 / 106
Регистрация: 17.05.2015
Сообщений: 1,497
|
|||||||||||
08.03.2019, 15:52 | 5 | ||||||||||
мерси!
А теперь правильный ответ))) CL - компилятор от вижуал студии, использует одно фазный парсинг шаблонов.Пока шаблон не инстанцирован, он даже не пытается валидировать синтаксис реализации шаблонов. Поэтому, в самой реализации можно написать любую некомпилируемую муть, и это будет работать: https://rextester.com/HII36365
Стандарт же рекомендует использовать двух фазный парсинг. В этом случае, компилятор уже на первой фазе (когда ещё не известны формальные параметры шаблона) уже попытается провести максимально возможную диагностику синтаксиса. И, разумеется, выявит совсем уж очевидные ошибки) например, gcc сразу пофиксил ошибку
1
|
Комп_Оратор)
|
|
08.03.2019, 16:32 | 7 |
eva2326, с синтаксисом там нет проблем. Там нет перегруженного оператора для данного типа. Но поскольку нет инстанциирующего вызова, данный шаблон вообще не компилируется. Не потому что нельзя скомпилировать, а потому что нет инстанцирования и никто, соответственно, не делает подстановки (чтобы получить ошибку вызова операции).
О том, что это вопрос реализации (кривой вероятно, не спорю) я написал. Однако в защиту майкрософт (что редко у меня случается) скажу. Нет вреда в таком поведении (рекомендации и требования это !=). Только быстрее компилится. И да, - холливар не предлагать!
0
|
Неэпический
|
|
08.03.2019, 16:49 | 8 |
Майкрософт уже справляется с этой проблемой.
А если указать ключ /permissive-switch для VS 2017 15.3?Там, вроде, поправили. Или частично поправили. Добавлено через 1 минуту Во, вот тут говорят, что скоро оно будет по дефолту. https://devblogs.microsoft.com... s-to-msvc/
1
|
Комп_Оратор)
|
||||||
08.03.2019, 18:27 | 9 | |||||
Это не проблема. Если бы компилировалось:
0
|
Неэпический
|
||||||
08.03.2019, 18:38 | 10 | |||||
https://rextester.com/ULYXQ75622
0
|
Комп_Оратор)
|
||||||
08.03.2019, 18:56 | 11 | |||||
Слава богу что вы согласились. Моя 2008-я генерит один и тот же экзешник независимо от того присутствуют эти классы или нет:
0
|
Неэпический
|
|
08.03.2019, 19:33 | 12 |
Другие компиляторы также делают, но всё-таки производят вторую фазу, как и должно.
Собственно, если Вы не заметили, мелкософт с этим тоже согласен, и работает над этим. Так что, кроме Вас, наверное, это больше никому не надо. Ошибки синтаксиса и то что заведомо не компилируемо лучше сразу отсечь, а не при инстанцировании. Я не соглашался, я лишь забил.
0
|
Комп_Оратор)
|
|
08.03.2019, 20:11 | 13 |
Но да. Это написал я и ни кто другой.
Кто спорит? Вред - налицо. Нельзя компилить быстро. Надо проверить всё что может быть ненужно, потому что когда оно станет нужно его никто уже провыерять не будет. Забьёт и всё. Лан, это значит - забить?
0
|
Неэпический
|
|
08.03.2019, 21:08 | 17 |
Это однобокий взгляд. Вот Вам пример для взгляда с другой стороны.
Заголовочный файл с шаблоном включается в тысячу единиц трансляции. Все единицы трансляции используют что-то из этого заголовка. Та единица трансляции, которая инстанцирует код с глупой ошибкой компилируется последней. Итого, компилируется 999 файлов, после чего, при инстанцировании выявляется ошибка. Вы её исправляете, и теперь нужно перекомпилировать опять всю тысячу зависимых единиц трансляции. А ведь ошибка могла быть обнаружена еще при компиляции первого файла, включающего "плохой" заголовок.
0
|
Комп_Оратор)
|
|
08.03.2019, 21:15 | 18 |
Croessmah, ужосы рассказываете. Можно и не такое придумать. Однако, я ни где не написал, что это хорошо. Более того, я написал, что это вероятно кривовато, но большого вреда в этом нет.
В больших проектах всё что порождает глобальные зависимости - это уже архитектурные костыли в том случае, если оно требует частого изменения. И такие вещи (изменения требующие глобальной или по крайней мере, значительной перекомпиляции) всегда являются предметом пристального анализа и огромной ответственности. Там никому памперсы и предупреждающие знаки не нужны. Ну почти ни кому. Но если есть возможность не делать лишнюю работу, то это можно использовать не только на пользу. Вообще, использовать возможности во вред всегда легче. Тут нет ни чего удивительного.
1
|
08.03.2019, 21:15 | |
08.03.2019, 21:15 | |
Помогаю со студенческими работами здесь
18
Перегрузка и шаблоны функций Шаблоны перегрузка ввода/вывода Перегрузка операторов через шаблоны Шаблоны и перегрузка различных операторов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи | |||||
Элементы алгоритмизации
hw_wired 28.01.2025
Основы алгоритмизации
В современном мире алгоритмы играют фундаментальную роль в развитии информационных технологий и программирования. Понимание основ алгоритмизации является ключевым элементом в. . .
|
Человек и информация
hw_wired 28.01.2025
Введение: роль информации в познании мира
В современном мире информация играет фундаментальную роль в процессе познания окружающей действительности. Она представляет собой совокупность сведений об. . .
|
Компьютер и информация
hw_wired 28.01.2025
Эволюция вычислительных машин
История развития вычислительной техники начинается задолго до появления первых электронных устройств. Человечество всегда стремилось упростить процесс вычислений и. . .
|
Информационные технологии
hw_wired 28.01.2025
Введение в современные технологии работы с информацией
В современном мире информационные технологии стали неотъемлемой частью практически всех сфер человеческой деятельности. Они существенно. . .
|
Информация вокруг нас
hw_wired 28.01.2025
Основные понятия информации
В современном мире понятие информации является фундаментальным и охватывает практически все сферы человеческой деятельности. Информация представляет собой совокупность. . .
|
Компьютер для начинающих
hw_wired 28.01.2025
Введение в мир компьютерных технологий
В современном мире информация стала одним из важнейших ресурсов человечества, определяющим развитие общества и технологий. Наша жизнь неразрывно связана с. . .
|
[golang] 189. Rotate Array
alhaos 28.01.2025
Повороты рукоятки, целочисленный слайс нужно сдвинуть на целое положительное число. Мне очень нравится решение на GO
/ / https:/ / leetcode. com/ studyplan/ top-interview-150/
package topInterview
. . .
|
КуМир: решение задач на матрицы
bytestream 28.01.2025
КуМир представляет собой среду для обучения программированию, которая включает в себя мощные инструменты для работы с матрицами. Матрица в программировании - это двумерный массив, состоящий из. . .
|
КуМир: решение задач на строки
bytestream 28.01.2025
В системе программирования КуМир работа со строковыми данными является одним из важнейших аспектов создания программ. Строки представляют собой последовательности символов, заключенные в кавычки,. . .
|
КуМир: решение геометрических задач
bytestream 28.01.2025
Программирование геометрических задач в среде КуМир становится всё более актуальным в обучении школьников и студентов. КуМир — это разработанная в России обучающая программная среда, предназначенная. . .
|
КуМир, исполнитель Водолей: Задачи и решения
bytestream 28.01.2025
КуМир — это образовательная среда для обучения программированию. Она предлагает пользователям разнообразные инструменты для разработки и отладки программ, что особенно ценно для студентов и. . .
|
КуМир, исполнитель Чертежник: Решение задач
bytestream 28.01.2025
КуМир (Комплект Учебных МИРов) представляет собой образовательную среду для обучения основам программирования и алгоритмизации.
Исполнитель Чертежник работает на координатной плоскости, где может. . .
|