我有
typedef
'ed名称(可能在类中或不在类中),并且我想要一种方法typedef_type
从该类型的对象中获取一个这样的名称。例如,我想要在这个片段之后,
typedef int my_int;
my_int i;
std::string my_typedef = typedef_type(i);
my_typedef
包含 "my_int"
。
使用我知道的工具(typeid
和demangling),
my_typedef
将包含 "int"
,在我的用例中,它是非常长的字符串,带有嵌套的 map
、vector
等,因此难以辨认。
我怎样才能实现这个目标? 我的意思是拥有一个非侵入性或微创性代码,即不需要对定义我的
typedef
的所有标头进行修改的代码。
或者如果需要的话,进行一些最小的修改,因为我有一个包含大量源代码的包。
相关:
typeid
(并且仅靠它无法完成这项工作) ).这是做不到的。
C++ 没有任何“合理”的反射能力(即获取有关源代码的信息)。虽然您可以将类型作为字符串获取,然后对它们进行分解以使它们变得漂亮,但 typedef 只是另一个名称的快捷方式 - 编译器完全消除了所有这些,只使用它引用的类型。它可能仍然存在于调试符号中,但没有库(据我所知)将其用于反射目的,并且它将停止在发布版本上工作。