Typeid времени компиляции без RTTI с GCC

Есть ли способ получить информацию времени компиляции typeid из GCC с отключенным RTTI? В Visual Studio простая команда вроде const char * typeName = typeid (int) .name (); соответствующим образом вернет int, даже если RTTI отключен. К сожалению, GCC не может сделать то же самое. Когда я пытаюсь вызвать typeid без RTTI, моя программа вылетает. Я знаю, что отключение RTTI не является частью стандарта, но есть ли способ заставить GCC выполнять разрешение времени компиляции известных типов?

RTTI отключен по соображениям производительности. Мне не нужен RTTI времени выполнения.

Редактировать:

Вот что я в итоге сделал:

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 работает отлично. Я также добавил функцию TypeName (T type) , что означает, что вы можете делать такие вещи: int x = 0; printf (TypeName (x)); , и он распечатает «int». GCC действительно должен иметь возможность делать это во время компиляции, как VC ++.

18
задан Kyle 3 November 2011 в 23:12
поделиться