是否有C型__info的可移植包装,标准化类型名称字符串格式?

type_info :: name()的输出格式是具体实现的。

namespace N { struct A; }

const N::A *a;

typeid(a).name(); // returns e.g. "const struct N::A" but compiler-specific

有没有人写过一个包装器,它返回可编译的,可预测的类型信息,在编译器中是相同的。多个模板功能将允许用户获取有关类型的特定信息。所以我可以使用:

MyTypeInfo::name(a); // returns "const struct N::A *"
MyTypeInfo::base(a); // returns "A"
MyTypeInfo::pointer(a); // returns "*"
MyTypeInfo::nameSpace(a); // returns "N"
MyTypeInfo::cv(a); // returns "const"

这些功能只是一个例子,具有C型系统知识的人可能设计出更好的API。我在base()中感兴趣的那个。如果禁用RTTI或检测到不支持的编译器,则所有函数将引发异常。

这似乎是Boost可能实现的那种事情,但是我无法在任何地方找到它。有便携式图书馆吗?

在C做这些事情有一些限制,所以你可能不会在不久的将来找到你想要的。关于编译器在编译代码中插入的类型的元信息也是编译器使用的RTL的特定实现,所以第三方库难以在不依赖于未记录的功能的情况下做好工作的每个特定编译器可能会在更高版本中中断。

据我所知,Qt框架与您所期望的最接近。但它们完全独立于RTTI。相反,他们有自己的“编译器”解析源代码,并使用元信息生成额外的源模块。然后,您编译链接这些模块与程序,并使用他们的API来获取信息。看看http://doc.qt.nokia.com/latest/metaobjects.html

翻译自:https://stackoverflow.com/questions/8475321/is-there-a-portable-wrapper-for-c-type-info-that-standardizes-type-name-string

转载注明原文:是否有C型__info的可移植包装,标准化类型名称字符串格式?