Size: a a a

2020 December 07

AT

Alexander Tulikov in pro.cxx
Alex
Можно ли с помощью RTTI получить по указателю на метод класса его имя (метода)? Беглый поиск не выявил решения.
Было бы классно, а ещё по указателю на переменную её имя.
источник

A

Alex in pro.cxx
Вот так взял и зарубил все надежды одним коротким словом
источник

A

Alex in pro.cxx
Указатель на метод, я думаю, более статичная вещь, чем на переменную
источник

АК

Александр Караев... in pro.cxx
Alex
Можно ли с помощью RTTI получить по указателю на метод класса его имя (метода)? Беглый поиск не выявил решения.
Иначе компилятору пришлось бы сохранять в бинаре вообще все имена всех методов, что крайне затратно :)
источник

A

Alex in pro.cxx
Александр Караев
Иначе компилятору пришлось бы сохранять в бинаре вообще все имена всех методов, что крайне затратно :)
Хм, да, логично. Это если компилятор не может проследить, от каких методов я беру указатели, хотя это должно быть возможно отследить и добавить в таблицу только их.
источник

АК

Александр Караев... in pro.cxx
Alex
Вот так взял и зарубил все надежды одним коротким словом
А на практике все известные мне реализации не сохраняют имена методов, так что увы
источник

A

Alex in pro.cxx
А ещё можно было бы оптимизировать реализацию за счёт указания класса, потому что рядом с указателем на метод у программиста обычно есть и указатель на класс.
источник

A

Alex in pro.cxx
Я могу, хотя бы, рассчитывать, что два указателя на один и тот же метод того же класса всегда будут иметь одинаковое значение  указателя в течение одного запуска программы?
источник

АР

Андрей Руссков... in pro.cxx
кажется нет, если метод класса inline
источник

АР

Андрей Руссков... in pro.cxx
а вот адресация одного и того дже метода из одного и того же TU вряд ли может давать разный результат
источник

A

Alex in pro.cxx
Спасибо, такой гарантии для моего случая достаточно. А про инлайн не подумал, логично, это же разные реализации, по сути. Спасибо за поправку.
источник

m

magras in pro.cxx
Андрей Руссков
кажется нет, если метод класса inline
Разве inline влияет на это? Если где-то берется адрес inline функции, компилятор не имеет права выбрасывать тело функции и все указатели будут указывать на него.
источник

АР

Андрей Руссков... in pro.cxx
inline влияет как раз именно на это - позволяет инстанцировать функцию несколько раз (соответственно у неё могут быть разные адреса в каждом TU с инстанциацией)
источник

ПК

Побитый Кирпич... in pro.cxx
Андрей Руссков
inline влияет как раз именно на это - позволяет инстанцировать функцию несколько раз (соответственно у неё могут быть разные адреса в каждом TU с инстанциацией)
Нет, ты путаешь со static
источник

АР

Андрей Руссков... in pro.cxx
компилятор будет пытаться склеить inline функции воедино
источник

АР

Андрей Руссков... in pro.cxx
но никто не гарантирует что он это сделает для каждого конкретного случая
источник

ПК

Побитый Кирпич... in pro.cxx
inline это external linkage - адрес один
источник

m

magras in pro.cxx
Андрей Руссков
inline влияет как раз именно на это - позволяет инстанцировать функцию несколько раз (соответственно у неё могут быть разные адреса в каждом TU с инстанциацией)
Линкер выкинет все дубликаты и оставит один инстанс.
источник

АР

Андрей Руссков... in pro.cxx
magras
Линкер выкинет все дубликаты и оставит один инстанс.
не обязан
источник

m

magras in pro.cxx
Окей, почему существует ODR и к чему приводит его нарушение?
источник