C++ constexpr 类型 ID

C++ constexpr type ID

我注意到 typeid(T) 调用提供了一种很好的 constexpr 兼容方式来在编译时检索给定 class 的唯一标识符。这非常有用,但我注意到编译时未启用由此产生的 type_info 对象之间的关系运算符。这是有道理的,因为实际 ID 在运行时可能会有所不同。但是,我想在类型之间施加这样的排序:

  1. 每种类型都有一些在编译时生成的唯一 ID。这些 ID 是什么,或者它们在 class 之间的排序方式无关。
  2. 对于每对类型,可以通过关系比较类型之间的 ID,以确定哪个类型具有 "lesser" ID。
  3. 如果 ID 的顺序在编译之间发生变化,并不重要

通过显式定义每种类型的 ID,这在编译时非常可行。但是,我想知道是否有更合理的方法来生成允许关系操作的编译时、constexpr 兼容的 ID。

谢谢!

总结评论:

boost::fusion::set<> 具有您需要的功能,具有模拟标准库中大多数算法的元函数,包括插入和删除。所有 Fusion 容器都是完全基于堆栈的,因为它们都是简单的元组,上面有算法元函数。

(Boost.Fusion 概述 here。)