有没有办法在禁用RTTI的情况下从GCC那里获得编译时的typeid
信息?在Visual Studio中,像const char* typeName = typeid(int).name();
这样的简单命令将适当地返回"int",即使禁用了RTTI。不幸的是,GCC做不到同样的事情。当我试图在没有RTTI的情况下调用typeid
时,我的程序崩溃了。我知道禁用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<int>
就能完美地工作。我还添加了函数TypeName(T type)
,这意味着您可以这样做:int x = 0; printf(TypeName(x));
,它将输出"int“。GCC应该真的能够像VC++那样在编译时做到这一点。
https://stackoverflow.com/questions/8001207
复制相似问题