Можно ли каким-либо образом получить информацию о типе во время компиляции из GCC с отключенным RTTI? В Visual Studio простая команда типа const char* typeName = typeid(int).name(); соответствующим образом вернет «int», даже если RTTI отключен. К сожалению, GCC не может сделать то же самое. Когда я пытаюсь вызвать typeid без RTTI, моя программа выходит из строя. Я знаю, что отключение RTTI не является частью стандарта, но могу ли я в любом случае заставить GCC выполнять разрешение времени компиляции известных типов?
RTTI отключен по соображениям производительности. Мне не нужен RTTI во время выполнения.
Редактировать:
Вот что у меня получилось:
Код: Выделить всё
template const char* TypeName(void);
template const char* TypeName(T type) { return TypeName(); }
#define REFLECTION_REGISTER_TYPE(type) \
template const char* TypeName(void) { return #type; }
Требуется, чтобы REFLECTION_REGISTER_TYPE вызывался для каждого типа, которому требуется информация для отражения. Но пока он вызывается для каждого требуемого типа, вызов TypeName работает отлично. Я также добавил функцию TypeName(T type), что означает, что вы можете делать такие вещи: int x = 0; printf(TypeName(x)); и он выведет «int». GCC действительно должен иметь возможность делать это во время компиляции, как это делает VС++.
Подробнее здесь:
https://stackoverflow.com/questions/800 ... i-with-gcc