Отладчик win32 показывает имя рассматриваемого класса в окне инспектора, что означает, что информация должна быть доступна, вопрос только в том, сделали ли разработчики Microsoft функцию общедоступной.
Для целей отладки/диагностики/разработки я хочу написать функцию для получения экземпляра имени класса объекта С++ в качестве вывода и в качестве ввода указателя на базовый класс.
Например:
const char* GetNameOfInstanciatedClassByVoidPtr(void* pBaseClassOrInstanciatedClass);
class B { public: virtual void Init (){
assert(StringIsEqual(GetNameOfInstanciatedClassByVoidPtr(this), "C")); } };
class C : B {} c; c.Init();
Пожалуйста, предоставьте решение для реализации функции GetNameOfInstanciatedClassByVoidPtr.
Итак, вопрос: что требуется lib/header/function? Я думаю, API для информации об отладке win32 поможет?
Написание виртуальных функций, возвращающих строки или type_info, в моей ситуации неприемлемо.
Как я уже говорил: это только для целей диагностики/отладки/разработки, НЕ для производственного кода, поэтому, пожалуйста, избегайте дискуссий о целях чистого кода. Я также мог бы собирать информацию вручную, но, поскольку это около 260 классов, я мог бы работать быстрее. ;)
EDIT: в первой версии вопроса у меня была функция GetNameOfInstanciatedClassByVoidPtr, вызываемая в конструкторе, но я заметил, что информация еще недоступна во время конструктора. Поэтому я помещаю его в метод Init, который всегда вызывается. В этом методе отладчик показывает имя экземпляра класса, поэтому, если я помещу функцию GetNameOfInstanciatedClassByVoidPtr в мой метод инициализации, информация может быть получена.
void*
или изB*
? - person Jarod42   schedule 29.07.2021