C++ C++;编译时一致标识符生成

C++ C++;编译时一致标识符生成,c++,C++,我需要实现一个类型索引结构,该结构将正确且一致地识别项目中的每个类型 使用类似于std::type_index的东西的问题在于,它需要在不同的编译单元之间保持一致。 我需要在编译单元之间保持一致,因为我将在运行时将共享库作为子模块加载(因此它们不会链接到主模块),并且它们对于相同的类型都应该具有相同的索引,如果我使用std::type_index或自定义索引生成函数,每个编译单元都有自己的索引生成实现,因此索引可能不一致 是否有任何模板方法可以为跨编译单元一致的类型生成唯一索引(例如,在第一次编

我需要实现一个类型索引结构,该结构将正确且一致地识别项目中的每个类型


使用类似于
std::type_index
的东西的问题在于,它需要在不同的编译单元之间保持一致。 我需要在编译单元之间保持一致,因为我将在运行时将共享库作为子模块加载(因此它们不会链接到主模块),并且它们对于相同的类型都应该具有相同的索引,如果我使用
std::type_index
或自定义索引生成函数,每个编译单元都有自己的索引生成实现,因此索引可能不一致

是否有任何模板方法可以为跨编译单元一致的类型生成唯一索引(例如,在第一次编译和第二次编译时,
TypeA
将具有索引
1


是否有任何工具可以让我将源代码输入并一致地从中生成硬编码索引?

实际的用例是什么?您不应该依赖C++类型的系统来进行这种行为,因为 Type信息> />代码>和<代码> Type索引>代码>是在运行时区分类型的上下文中设计的。是什么阻止您向自己的自定义解决方案注册类型?例如,您可以将此作为基于某个配置文件生成代码的预构建步骤来完成。我不知道它是如何工作的,也不知道它是否符合您的要求。
std::type_index
std::type_info
完全一致。你为什么认为一致性有问题?@n.“代词是m。模块二进制文件将独立于主机二进制文件进行编译,因此每个模块都将生成自己的
std::type_index
s,它们之间的相等性是实现定义的行为afaik。@这就是我主要要问的。问题是是否有任何工具或基于模板的解决方案,如您所说,用于注册类型和生成预设索引(无论是基于0的索引、哈希还是uuid)