|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
||||||
Что означает решетка внутри макроса?10.07.2017, 19:54. Показов 5463. Ответов 17
Метки нет (Все метки)
Нашёл код, там внутри макроса используются решетки. Что это означает? Если объясните сам код вообще было бы круто!
![]()
0
|
||||||
| 10.07.2017, 19:54 | |
|
Ответы с готовыми решениями:
17
Что означает "Нельзя изменять значение переменной цикла внутри этого цикла"? Define внутри макроса |
|
Заблокирован
|
||
| 10.07.2017, 19:55 | ||
|
1
|
||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 10.07.2017, 19:58 [ТС] | |
|
Судя по всему решетка задаёт остаток имени. Но почему именно ##X? Это синтаксис такой или можно и по другому ?
0
|
|
|
What a waste!
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
|
|
| 10.07.2017, 20:00 | |
|
# - преобразует идентификатор в строковый литерал.
## - конкатенация. en.cppreference.com/w/cpp/preprocessor/replace. См. # and ## operators.
1
|
|
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 10.07.2017, 20:07 [ТС] | |
|
daun-autist, gray_fox,
Круто, спасибо! Попытаюсь разобрать код на основе полученных знаний, но если кто то решит пояснить буду только рад!
0
|
|
|
Заблокирован
|
||||||
| 10.07.2017, 20:10 | ||||||
|
Undisputed, что тут разбираться?
Раскрытие макроса CREATE_MEMBER_DETECTOR(first); превращается в определение шаблона класса
## нужно чтобы токены Detect_ и first были объединены в один токен Detect_first
0
|
||||||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 10.07.2017, 20:12 [ТС] | |
|
daun-autist,
Я про логику в коде. Например не понятно зачем там два массива char которые состоят из 1 и 2 элементов
0
|
|
|
What a waste!
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
|
||
| 10.07.2017, 20:38 | ||
|
Undisputed, данный макрос разворачиватся в type_trait для определения наличия члена класса.
Ещё pre-C++11, сейчас можно и покороче написать. Добавлено через 9 минут Добавлено через 13 минут Сейчас можно использовать специализацию c void_t: http://en.cppreference.com/w/cpp/types/void_t. Добавлено через 1 минуту Хотя, конечно, для каждого члена класса и т.д. придётся так же иметь отдельный класс.
1
|
||
|
Заблокирован
|
||||||||
| 10.07.2017, 20:39 | ||||||||
func был выбран в func<Derived>(0).Попытаюсь ниже не соврать. Если в типе T (в частности, здесь это Pair a.k.a. std::pair<int, double>) есть член X (здесь first или second), то шаблон
func<Derived>(0), т.к. будет неясно, какой из Derived::X (Derived::first) имеется в виду в &U::X, будет ambiguity. Но мы знаем, что substitution failure is not an error, поэтому этот шаблон просто удалится из кандидатов и будет выбран второй шаблон.Если же в типе T нет члена X, то при выборе первого шаблона не возникнет неоднозначности с тем, на какое из полей ссылается U::X.
2
|
||||||||
|
What a waste!
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
|
|
| 10.07.2017, 20:45 | |
|
0
|
|
|
Заблокирован
|
||
| 10.07.2017, 20:48 | ||
T::X или Fallback::X имеется в виду.Короче, вы понели.
0
|
||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 10.07.2017, 22:00 [ТС] | |
|
daun-autist,
в мейне почему то проверяется если оба вызова инстанциировали шаблон с эллипсисом, тогда это pair. А нам же нужно наоборот т.к именно шаблон без эллипсиса определяет наличие нужного члена класса. Но это работает)) видимо я чего то не догоняю Добавлено через 4 минуты Помоему шаблон без эллипсиса больше подходит для того чтоб определить есть в классе искомый член или нет Но раз работает наверное я ошибаюсь...просто параметры этого шаблона визуально выглядят более подходящими
0
|
|
|
Заблокирован
|
||||||
| 10.07.2017, 22:48 | ||||||
|
Undisputed, я же вроде всё расписал довольно подробно...
Когда в типе T есть член с именем X, то в Derived, унаследованном от Fallback (в котором тоже есть член X) и T, возникают два члена X: T::X и Fallback::X. И в шаблоне
U::X = Derived::X возникает неоднозначность с тем, на какой X — T::X и Fallback::X — ссылаются. Из-за этой неоднозначности шаблон исключается из списка кандидатов.
1
|
||||||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 10.07.2017, 23:05 [ТС] | |
|
daun-autist,
Вот оно что. Теперь понятно, спасибо. Добавлено через 3 минуты Просто обычно ошибки вроде ambiguous приводят к ошибке компиляции, но в данном случае кандидат на инстанциирование просто отбрасывается. С этой точки зрения об этом я даже и не задумался
0
|
|
|
Заблокирован
|
|||
| 10.07.2017, 23:10 | |||
|
Добавлено через 1 минуту
0
|
|||
| 12.07.2017, 09:40 | |
|
Не по теме: Как-то я свалил терминологию из инстанциации шаблонов и выбора перегруженной функции в одну кучу. Ну да ладно.
0
|
|
|
116 / 4 / 0
Регистрация: 05.06.2019
Сообщений: 62
|
||||||
| 30.03.2020, 21:40 | ||||||
|
Не понятно что значит Fallback::* ?
* указатель на тип Fallback? Если да, то где имя указателя? Обычно например пишут int *p, что означает что это указатель на тип int и имя указателя, а здесь как?
0
|
||||||
|
19497 / 10102 / 2461
Регистрация: 30.01.2014
Сообщений: 17,813
|
||||||||||
| 30.03.2020, 21:47 | ||||||||||
|
Не Fallback::*, а int Fallback::* - это указатель на нестатический член типа int класса Fallback.int Fallback::*
1
|
||||||||||
| 30.03.2020, 21:47 | |
|
Помогаю со студенческими работами здесь
18
Использование списка внутри макроса Подпрограммы (RCALL) внутри макроса
Что означает появление письменности (языка), и что означает реформа письменности (языка)? Поясните пожалуйста что означает двоеточие и то что идет после него Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|
|
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога
Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
|
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога
Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|