В любом случае, чтобы получить информацию о времени компиляции typeid
от GCC с отключенным RTTI? В Visual Studio простая команда типа const char* typeName = typeid(int).name();
будет соответствующим образом возвращать "int", даже если RTTI отключен. К сожалению, GCC не может сделать то же самое. Когда я пытаюсь вызвать typeid
без RTTI, моя программа выйдет из строя. Я знаю, что отключение RTTI не является частью стандарта, но все равно я могу заставить GCC выполнить компиляцию временного разрешения известных типов?
RTTI отключен по соображениям производительности. Мне не нужна RTTI времени выполнения.
Edit:
Вот что я закончил:
template<typename T> const char* TypeName(void);
template<typename T> const char* TypeName(T type) { return TypeName<T>(); }
#define REFLECTION_REGISTER_TYPE(type) \
template <> const char* TypeName<type>(void) { return #type; }
Это требует, чтобы REFLECTION_REGISTER_TYPE
вызывался для каждого типа, который нуждается в информации отражения. Но до тех пор, пока он требует для каждого требуемого типа, вызов TypeName<int>
работает отлично. Я также добавил функцию TypeName(T type)
, что означает, что вы можете делать такие вещи: int x = 0; printf(TypeName(x));
и распечатывать "int". GCC должен действительно быть в состоянии сделать это во время компиляции, например, VС++.