|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|||||||
Шаблоны. Плохо понимаемые моменты из книги "Шаблоны С++. Справочник разработчика". (Вандевурд, Джосаттис)07.10.2015, 15:04. Показов 6361. Ответов 32
Метки нет (Все метки)
Так как изучаю эту книгу, то в некоторых местах возникают вопросы. Чтобы не плодить много тем, корни у которых одни, решил создать эту тему.
Дошел до места. Параметры шаблонов функций, не являющиеся типами. Там описан такого вида пример
0
|
|||||||
| 07.10.2015, 15:04 | |
|
Ответы с готовыми решениями:
32
Использование обобщенных лямбда-выражений с SFINAE из книги "Шаблоны C++. Справочник разработчика" Шаблоны C++: справочник разработчика Хранить шаблоны документов в базе и выводить данные в эти шаблоны |
|
553 / 361 / 206
Регистрация: 27.11.2014
Сообщений: 1,049
|
|
| 07.10.2015, 15:17 | |
|
daslex, шаблон - это просто заготовка. шаблона не переживет компиляцию. на основе шаблона компилятор (вместо тебя) напишет конечную функцию с вполне конкретными типами. ты делаешь шаблон, что не писать сто раз одну и ту же функцию меня тип параметра.
Добавлено через 1 минуту правда после этого набора слов препод у меня на уроке махнул рукой и отпустил всех пораньше.
0
|
|
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|
| 07.10.2015, 15:18 [ТС] | |
|
Это не пояснение цитаты. Я знаю, что такое шаблон. Вопрос не в том, что он такое. Откуда тут интерпретация как семейства перегруженных функций.
0
|
|
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 07.10.2015, 15:20 | |
|
А то, что он дальше пишет, почему не привёл? Там же объясняется причина.
0
|
|
|
553 / 361 / 206
Регистрация: 27.11.2014
Сообщений: 1,049
|
|
| 07.10.2015, 15:21 | |
|
Ну это автор конечно завернул. Перегруженные они лишь пока не компилировалось. А потом все разные станут (трансляция имен с параметрами какая-то).
0
|
|
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
||||||
| 07.10.2015, 15:28 | ||||||
|
Там сказано:
However, according to the current standard, sets of overloaded functions cannot be used for template parameter deduction. Thus, you have to cast to the exact type of the function template argument:
Книжка 2002 года, может это уже не актуально.
1
|
||||||
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
||
| 07.10.2015, 15:29 [ТС] | ||
|
В той книге, что у меня перед глазами причина не объясняется.
0
|
||
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 07.10.2015, 15:32 | |
|
Я же привёл текст. Он говорит, что according to the current standard надо делать так-то. Но есть предложение стандарт подправить. Книжка древняя, может в C++11 уже не так. Пусть спецы прокомментируют.
0
|
|
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|
| 07.10.2015, 15:36 [ТС] | |
|
Понимание первопричины гораздо важнее понимания отдельного кусочка. Да, он говорит как надо делать. Но тут я могу сделать, а где-то могу не сделать, ибо не вижу где и когда получится семейство перегруженных функций, а где семейства перегруженных функций не получится.
Я например, могу так понять, что если в параметрах шаблона функции есть хотя бы 1 не тип, то нужно явное приведение при обращении к такой функции. Но это может оказаться неправильным выводом, я просто конкретики не вижу. А полагаться на свои незнания как на знания нехорошо.
0
|
|
|
553 / 361 / 206
Регистрация: 27.11.2014
Сообщений: 1,049
|
|||||||||||
| 07.10.2015, 15:42 | |||||||||||
Добавлено через 6 минут
0
|
|||||||||||
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
||
| 07.10.2015, 15:46 | ||
Сообщение было отмечено daslex как решение
Решение
1
|
||
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
||
| 07.10.2015, 15:50 [ТС] | ||
|
Да. Интерпретируется как шаблон. А все. Понял
Там раньше написано
Не по теме: Поназаводили синонимов, блин
0
|
||
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 07.10.2015, 15:52 | |
|
daslex, так в твоей книги есть перевод этого куска или нет?
0
|
|
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
||
| 07.10.2015, 16:00 [ТС] | ||
|
Да. у меня русский вариант книги. Просто это за 30 страниц до написано.
Добавлено через 6 минут (int(*)(int const&))addValue<int,5>);
0
|
||
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 07.10.2015, 16:57 | |
|
Что-то спецы пропали все.
0
|
|
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
|
||||||||||||
| 07.10.2015, 20:25 | ||||||||||||
|
daslex,
Вот эта надпись
Семейство перегруженных функций - это когда вот так:
Демо
В тот момент, когда мы попытаемся такую функцию передать в тот же std::transform, возникнет неоднозначность. Так вот, Йосуттис и еще несколько человек в 1999 году нашли баг в формулировке стандарта. Вследствие этого бага, стандарт обозначал такое же поведение для шаблонной функции, не смотря на полную конкретизацию типов аргументов шаблона, он ее считал неоднозначной и компилятор, строго следовавший стандарту, выдавал ошибку. Лечилось это приведением типа (как сейчас лечится вариант с перегрузкой). В книге есть сноска на обсуждение этого бага. Issue 115. Другое, на эту же тему: Issue 250. Естественно, далеко не все компиляторы реализовали у себя это ошибочное требование, поэтому даже в то время подобная проблема проявлялась далеко не везде. Но я отлично помню эту проблему на GCC 2.x.
8
|
||||||||||||
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|
| 07.10.2015, 20:43 [ТС] | |
|
Насчет демо я понимаю и понял бы. Просто туманностей нагоняет такой момент, что в случае, описываемом в книге, у шаблона указано 2 параметра, тип которых известен. В демо же вариант более очевиден и просто показана неоднозначность непосредственно при самой перегрузке.
Я вообще сейчас так воспринимаю, что у transform возвращается значение, вот тип этого возвращаемого значения не может быть выведен шаблоном, потому что вызов функции по синтаксису как синтаксис имени, а не как синтаксис вызова. Вот такой туман у меня в голове.
0
|
|
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
|
|||||||
| 07.10.2015, 20:59 | |||||||
Сообщение было отмечено daslex как решение
РешениеСуть в том, что transform (transform - шаблонная функция) принимает предикат, тип которого выводится из переданного параметра. Но предикат нельзя вывести однозначно, потому что вариантов больше, чем один. Такая же ситуация возникает, если мы подставим неполностью специфицированный шаблон, т.к. он воспримется как семейство функций.
В общем, это давно уже неактуально. Добавлено через 10 минут daslex, просто хочу добавить, что это неактуально как минимум с С++03 (редакция стандарта 2003 года).
3
|
|||||||
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
||||||
| 10.10.2015, 21:36 [ТС] | ||||||
|
После оговоренной темы, идет следующая. (5.3 Шаблоны членов классов). Вроде бы понятна, но есть кое что, чего я не осознаю. Пример комментировать не буду. Он не из книги, он - моя попытка реализации того, что пытаются донести в книге.
Я застрял на возвращаемом значении.
0
|
||||||
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 10.10.2015, 21:45 | |
|
А почему возвращается T, а не MyClass?
1
|
|
| 10.10.2015, 21:45 | |
|
Помогаю со студенческими работами здесь
20
Чем отличаются шаблоны HTML и шаблоны WordPress «Шаблоны шаблонов» vs «шаблоны с параметрами-шаблонами». Помогите писать на С++ через шаблоны. Консуле я писал, но надо писать исползуя шаблоны Не могу обнаружить ошибку в учебной программе из книги (шаблоны классов)
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2.
Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники".
В. . .
|
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии.
. . .
|
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
|
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут.
https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc
Первый документ красиво выглядит, но без схемы.
Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
|
|
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере".
Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
|
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти".
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
В качестве источника данных. . .
|
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер
Написал заготовку:
dotnet new console --aot -o UrlHandler
var items = args. Split(":");
var tag = items;
var id = items;
var executable = args;. . .
|
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3.
Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
|