|
99 / 70 / 13
Регистрация: 15.12.2013
Сообщений: 463
|
|||||||||||||||||||||
Friend declaration construction16.07.2016, 04:27. Показов 3261. Ответов 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 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Из невошедшего на форум (диалог с ИИ-гугла)
zorxor 29.07.2026
А вот, что интересно, сказал мне ИИ-гугла:
Этот текст — эмоциональный пост пользователя под ником zorxor на интернет-форуме (вероятно, посвященном мистике, непознанному или альтернативной науке). . . .
|
Был праздник вчера, а я и не знал.
kumehtar 28.07.2026
27. 07. 2026г. Intel Core 2 Duo исполнилось 20 лет
Новости компьютерного мира и их обсуждение (4)
Салют, шампанское, овации!
:drink:
|
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр.
Дословно, отклонённая. . .
|
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы
Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
|
|
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
|
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2.
Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
|
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
|
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
|