【发布时间】:2014-07-05 19:40:13
【问题描述】:
C++ 是否提供所有类型集合的排序作为常量表达式?哪个特定顺序都没有关系,任何人都会这样做。这可以是 constexpr 比较函数的形式:
template <typename T1, typename T2>
constexpr bool TypeLesser ();
我的用途是编译时自平衡类型的二叉搜索树,作为 (cons/nil) 类型列表的替代品,以加快编译速度。例如,检查一个类型是否包含在这样的树中可能比检查它是否包含在类型列表中更快。
如果标准 C++ 不提供此类功能,我也将接受编译器特定的内在函数。
请注意,如果获得排序的唯一方法是通过在整个代码库(包括许多模板和匿名结构)中添加样板来手动定义它,我宁愿保留类型列表。
【问题讨论】:
-
比较
typeid的可能吗? -
@πάνταῥεῖ 对于我的问题,std::type_info 似乎没有任何用处。请注意,我正在寻找 constexpr 排序。
-
我认为严格的弱排序对于 BST 来说是不够的。我在想
sizeof(T)... -
有
type_index,但不是constexpr -
@Praetorian:由于所有类型的总和取决于查看所有翻译单元,因此似乎不太可能有 constexpr 排序。至少没有特殊的编译器和链接器支持。
标签: c++ templates binary-search-tree template-meta-programming