获取字符串形式的 typedef 名称

问题描述 投票:0回答:1

我有

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
的所有标头进行修改的代码。 或者如果需要的话,进行一些最小的修改,因为我有一个包含大量源代码的包。

相关

  1. 如何使用 typeid 来获取使用 typedef 定义的类型名称
    注意:当前的操作显然不是那个操作的骗局,因为它专注于
    typeid
    (并且仅靠它无法完成这项工作) ).
c++ enums typedef typeid
1个回答
0
投票

这是做不到的。

C++ 没有任何“合理”的反射能力(即获取有关源代码的信息)。虽然您可以将类型作为字符串获取,然后对它们进行分解以使它们变得漂亮,但 typedef 只是另一个名称的快捷方式 - 编译器完全消除了所有这些,只使用它引用的类型。它可能仍然存在于调试符号中,但没有库(据我所知)将其用于反射目的,并且它将停止在发布版本上工作。

© www.soinside.com 2019 - 2024. All rights reserved.