|
99 / 70 / 13
Регистрация: 15.12.2013
Сообщений: 463
|
|||||||||||||||||||||
Friend declaration construction16.07.2016, 04:27. Показов 3475. Ответов 36
Метки нет (Все метки)
Читаю C++ Templates. The Complete Guide. Вандервурд, Джоссатис
В одной из глав речь идет об объявлениях дружественных конструкций. Основная идея такова:
Определение специализации шаблона запрещено. Но говорится и о втором варианте объявления дружественных конструкций, в котором угловые скобки вообще опускаются. В качестве пояснения, даются два правила: 1) Если имя не полное (без указания пространств имен или класса), то такое имя может ссылаться только на обычную функцию. При этом, если в точке объявления функции в качестве дружественной она еще не была объявлена, то дружественная конструкция, ее первое объявление, в таком случае оно может быть и определением. 2) Если имя полное (содержит :: ), то оно должно ссылаться на ранее объявленную функцию или шаблон функции. Предпочтение отдается функции перед шаблоном функции. Не может быть определения. Дается разъясняющий пример:
multiply<int> классу Mixer:
0
|
|||||||||||||||||||||
| 16.07.2016, 04:27 | |
|
Ответы с готовыми решениями:
36
Ошибка E2238 Multiple declaration for и E2344 Earlier declaration of выпадает на одной и той же строке Ошибка: friend declaration declares a non-template function Почему friend ostrem& operator <<(ostream& outs, const Rational&); - invalid function declaration? |
|
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
|
||
| 16.07.2016, 18:09 | ||
|
Сейчас ухожу на пьянку. Вечером, если буду в состоянии, продемонстрирую разницу примером. Ну, или завтра, если буду не в состоянии.
0
|
||
| 16.07.2016, 18:44 | |
|
0
|
|
|
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
|
||||||||||
| 17.07.2016, 16:29 | ||||||||||
|
Я протрезвел, продолжим
![]()
Второй и третий пункты:
Тогда, если есть нешаблонная функция с таким именем - она друг. Потом ищется шаблон с таким именем. Если и он не найден - имя должно быть неквалифицированным, и оно объявляется/определяется во внешнем неймспейсе. Соответственно: Friend declaration 2 - относится к void foo(), а если ее закомментировать - будет относится к void foo<int>(). Как-то так.
1
|
||||||||||
|
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
|
||||||
| 17.07.2016, 17:39 | ||||||
|
avgoor, Так-то оно так, но вопрос в следующем коде:
1
|
||||||
|
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
|
|
| 17.07.2016, 18:37 | |
|
0
|
|
|
99 / 70 / 13
Регистрация: 15.12.2013
Сообщений: 463
|
|
| 17.07.2016, 18:40 [ТС] | |
|
Nosey, так вроде ссылка на статью с авторством Герба Саттера, которую Вы скинули как раз объясняет эти моменты? )) Разве нет? ) Саттер пишет, что это баг и правило #3 следует избегать. Лучше использовать #1, там где qualified or unqualified template-id указывается.
1
|
|
|
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
|
||
| 17.07.2016, 19:09 | ||
0
|
||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
| 17.07.2016, 19:24 | |
|
кароче! вы одолели уже!
напишите код, который иллюстрирует все три правила. по мне так, 3-е правило нефига не работает, причем во всех топовых компиляторах я понимаю - есть обходной путь. но блин, это не суть. суть в том, что бы понять значение всех этих правил. вот давайте с толком, с расстановкой, и по-русски. с примерами кода. а потом модераторы вынесут эту жемчужину в шапку раздела. это реально интересный момент языка.
1
|
|
|
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
|
||||||||
| 17.07.2016, 19:50 | ||||||||
3
|
||||||||
|
99 / 70 / 13
Регистрация: 15.12.2013
Сообщений: 463
|
|
| 17.07.2016, 20:15 [ТС] | |
|
Nosey, наверное стоит дополнить, что friend declaration для f3,то есть то самое третье правило, как раз оно и является багом в каких-то компиляторах
1
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||
| 17.07.2016, 20:35 | ||
|
но этот материал реально важен, я считаю. я за то, что бы модераторы прикрепили его к разделу. давайте назовем раздел "стандарт с++ по-русски" я за то, что бы этот опыт не канул в лету. если вы согласны: пишите "TODO:раздел для стантарта" а потом по этим тегам можно будет найти все сообщения, и убедиться, что это интересно людям. Добавлено через 14 минут ASCII, я вашими спасибками Индустрию не накормлю. вы затронули интересную тему, о которой многие даже не задумывались. теперь давайте закрепим результат - тодокайте! пишите: TODO:"стандарт с++ по-русски" пусть модераторы создадут площадку для трактовки стандарта, и поместят туда эту тему. это - важно, это - наша культура. это мы сами здесь выработали в процессе диалога. я считаю, это не должно уйти в забвение. а потом в этом разделе смогут появляться самые разные другие трактовки. это круто для холиварных воийн местных военов как вы считаете?
4
|
||
|
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
|
|
| 17.07.2016, 20:44 | |
|
А вообще, я конечно за тему, со списком обсужденных нюансов стандарта.
0
|
|
|
99 / 70 / 13
Регистрация: 15.12.2013
Сообщений: 463
|
|
| 17.07.2016, 20:56 [ТС] | |
|
Nosey, а я вообще хотел переводить разделы стандарта и создать тему, со ссылками на каждый перевод по конкретной теме с подробными примерами кода в качестве пояснений. Хотя это наверное утопия.
0
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
| 17.07.2016, 21:08 | |
|
круто, парни!
я создал тему, что бы привлечь внимание администрации. я тоже хотел бы приложить свои ручонки к теме трактовок стандарта.
0
|
|
|
99 / 70 / 13
Регистрация: 15.12.2013
Сообщений: 463
|
|
| 17.07.2016, 21:52 [ТС] | |
|
hoggy, дай знать, когда ответят. Вообще я поддерживаю идею русификации стандарта. То есть чуть чуть очеловечить изложение в стандарте. Плюс выявление багов всяких (как отдельную тему).
0
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
| 17.07.2016, 21:58 | |
|
0
|
|
|
279 / 39 / 13
Регистрация: 11.10.2015
Сообщений: 405
|
|
| 28.02.2017, 16:40 | |
|
hoggy, круто что нашел подобную тему...в инете такой инфы почти нет
0
|
|
| 28.02.2017, 16:40 | |
|
Перегрузка операторов, friend или нет friend? Friend для friend [DCC Error] E2037 Declaration of 'SelectFitFromObzor' differs from previous declaration Ошибка Declaration of 'Button1' differs from previous declaration Ошибка: declaration of 'Init' differs from previous declaration Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
|
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации:
1. Вернуть возможность использования знаков | 1 l I;. . .
|
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С.
Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
|
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию?
Фраза «Любая достаточно развитая технология неотличима от магии». . .
|
|
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль?
Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
|
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология.
«Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
|
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки.
Добавлены следующие реквизиты типа Булево:
- Буквы;
- Цифры;
- Символы.
Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
|
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей.
Самым главным критерием для. . .
|