Size: a a a

2020 August 09

CD

Constantine Drozdov in pro.cxx
magras
Дорого? У нас уже есть type_info::name.
Одно на класс в коде
источник

ГH

Гласси Hudobin in pro.cxx
Ммм, "в этом месяце делфи еще не хоронили". Есть у меня мысль в следующем проекте кросс-платформенный ГУИ в Лазарусе сделать.
источник

АР

Андрей Руссков... in pro.cxx
вроде как за type_info ты не платишь пока не начинаешь им пользоваться?
источник

CD

Constantine Drozdov in pro.cxx
Андрей Руссков
вроде как за type_info ты не платишь пока не начинаешь им пользоваться?
платишь в vtbl
источник

АР

Андрей Руссков... in pro.cxx
типа type_info::name инстанцируется только для классов от которых инстанцируется type_info, разве нет?
источник

CD

Constantine Drozdov in pro.cxx
Андрей Руссков
типа type_info::name инстанцируется только для классов от которых инстанцируется type_info, разве нет?
type_info при включенном RTTI будет немедленно при появлении виртуальной функции, нет?
источник

АР

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

CD

Constantine Drozdov in pro.cxx
Андрей Руссков
не совсем понял при чем тут виртуальные функции
https://en.cppreference.com/w/cpp/language/object#Polymorphic_objects
Objects of a class type that declares or inherits at least one virtual function are polymorphic objects. Within each polymorphic object, the implementation stores additional information (in every existing implementation, it is one pointer unless optimized out), which is used by virtual function calls and by the RTTI features (dynamic_cast and typeid) to determine, at run time, the type with which the object was created, regardless of the expression it is used in.
источник

АР

Андрей Руссков... in pro.cxx
так, еще раз. Вот у меня есть указатель на интерфейс типа ISomeType*
источник

АР

Андрей Руссков... in pro.cxx
как мне получить имя типа SomeType в рантайме по этому указателю, если SomeType наследует ISomeType?
источник

m

magras in pro.cxx
Эх, плохо я знаю RTTI. На сколько я понимаю, получается dynamic_cast нельзя использовать для того, чтобы скастить base класс без виртуальных функций к derived? Вроде правила dynamic_cast'а на cppref тоже указывают на это.
источник

АР

Андрей Руссков... in pro.cxx
dynamic_cast он для виртуальных классов
источник

АР

Андрей Руссков... in pro.cxx
Вот например: https://godbolt.org/z/eY9Ez4
источник

АР

Андрей Руссков... in pro.cxx
пока не раскомментишь, typeinfo не генерится. Но когда раскомментишь, генерится и для базового, и для наследника
источник

АР

Андрей Руссков... in pro.cxx
При этом если по аналогии добавить SomeOtherType, всё равно typeinfo генерится только для указанных классов и их базовых:
https://godbolt.org/z/Yvc8aM
источник

ПК

Побитый Кирпич... in pro.cxx
magras
UB это и есть максимально производительное решение. То что на x86 есть SIMD инструкция которая использует переполнение с насыщением еще не значит что это так на всех платформах. Более того разработчики компилятора могут добавить преобразование неэффективного кода явно реализующего насыщение при переполнении в ту самую ассемблерную инструкцию.

Мне кажется что в большинстве случаев переполнение при конвертации float к int это логическая ошибка и с точки зрения пользователя разницы между UB и насыщением нет.
А как правильно проверит дабл на конвертируемость в integral?
источник

CD

Constantine Drozdov in pro.cxx
источник

CD

Constantine Drozdov in pro.cxx
на самом деле сгенерится вместе с конструктором, я полагаю
источник

CD

Constantine Drozdov in pro.cxx
вроде бы vtbl инстанцируется конструктором
источник

ПК

Побитый Кирпич... in pro.cxx
Constantine Drozdov
В общем, в некоторых рамках эта задача могла бы быть реализована компилятором по явному запросу на генерацию, но с точки зрения С++ если задача может быть решена без компилятора не очень понятно, зачем её решать компилятором
Дак рефлексию без компилятора не получить
источник