反正有禁用RTTI从GCC获取编译时typeid
信息吗?在Visual Studio中,即使禁用了RTTI,像const char* typeName = typeid(int).name();
这样的简单命令也将适当地返回“int”。不幸的是,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++一样在编译时执行此操作。 最佳答案
否。RTTI是运行时类型信息(并且禁用它很傻,但是嘿),这就是typeid
的目的。如果要在编译时将类型名称字符串化,则必须自己完成(通过模板或宏)。