首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用GCC编译不带RTTI的时间typeid

用GCC编译不带RTTI的时间typeid
EN

Stack Overflow用户
提问于 2011-11-04 04:11:25
回答 4查看 13.5K关注 0票数 21

有没有办法在禁用RTTI的情况下从GCC那里获得编译时的typeid信息?在Visual Studio中,像const char* typeName = typeid(int).name();这样的简单命令将适当地返回"int",即使禁用了RTTI。不幸的是,GCC做不到同样的事情。当我试图在没有RTTI的情况下调用typeid时,我的程序崩溃了。我知道禁用RTTI不是标准的一部分,但是有没有什么办法可以强制GCC做已知类型的编译时解析?

出于性能原因,RTTI被禁用。我不需要运行时RTTI。

编辑:

这是我最终想要的:

代码语言:javascript
运行
复制
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++那样在编译时做到这一点。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8001207

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档