Поведение typeid

124
05 июня 2021, 23:40

Почему нельзя завязываться на имя класса в кросс-платформенном коде? При получении имени класса через оператор typeid.

Answer 1

На имя класса в typeid нельзя завязываться ни в каком коде. Спецификация стандартной библиотеки не дает никаких гарантий на поведение метода std::type_info::name(): она не гарантирует наличия какого-либо осмысленного или практически полезного имени класса. Методы std::type_info::name() могут просто возвращать "Вася" для всех типов или вообще возвращать нестабильное значение от запуска к запуску одной и той же программы.

Answer 2

typeid(this).name" на gcc и на msvc дает разный вывод на msvc: "class Foo *" на gcc: "P4Foo"

READ ALSO
Как сохранить значения для каждого if

Как сохранить значения для каждого if

У меня есть переменная id, мне нужно сохранить ее значения и в тоже время выполнять условия

127
Преобразовать углы Эйлера в полряные координаты и обратно

Преобразовать углы Эйлера в полряные координаты и обратно

Есть задача рисовать объекты на земной поверности с помощью Qt5 и OpenGLПри этом систему координат, в которой находятся эти объекты можно описать...

106
Что такое recv vs recvfrom и send vs sendto?

Что такое recv vs recvfrom и send vs sendto?

send, sendto, и sendmsg используются для пересылки сообщений в другой сокетsend можно использовать, только если сокет находится в состоянии соединения,...

86
Сортировка в Jquery по условию

Сортировка в Jquery по условию

Есть выпадающий список, в некоторых данных списка есть на конце слова (не действует в 2019)

116