Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;constexpr类型ID_C++_Templates_C++11_Constexpr_Typeid - Fatal编程技术网

C++ C++;constexpr类型ID

C++ C++;constexpr类型ID,c++,templates,c++11,constexpr,typeid,C++,Templates,C++11,Constexpr,Typeid,我注意到,typeid(T)调用提供了一种很好的与constexpr兼容的方法,可以在编译时检索给定类的唯一标识符。这是非常有用的,但我注意到,在编译时不会启用由此产生的type\u info对象之间的关系运算符。这是有意义的,因为实际ID在运行时可能会有所不同。但是,我希望在类型之间进行排序,以便: 每个类型都有一些在编译时生成的唯一ID。不管这些ID是什么,也不管它们在类之间的顺序如何 对于每一对类型,可以对类型之间的ID进行关联性比较,以确定哪个类型具有“较小”的ID 如果ID的顺序在编译

我注意到,
typeid(T)
调用提供了一种很好的与constexpr兼容的方法,可以在编译时检索给定类的唯一标识符。这是非常有用的,但我注意到,在编译时不会启用由此产生的
type\u info
对象之间的关系运算符。这是有意义的,因为实际ID在运行时可能会有所不同。但是,我希望在类型之间进行排序,以便:

  • 每个类型都有一些在编译时生成的唯一ID。不管这些ID是什么,也不管它们在类之间的顺序如何
  • 对于每一对类型,可以对类型之间的ID进行关联性比较,以确定哪个类型具有“较小”的ID
  • 如果ID的顺序在编译之间发生变化,则无关紧要
  • 通过显式地定义每种类型的ID,这在编译时是非常可行的。然而,我想知道是否有一种更合理的方法来生成每种类型的编译时、与constexpr兼容的ID,从而允许进行关系操作

    谢谢

    总结评论:

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


    (Boost.Fusion概述。)

    我很好奇为什么需要编译时比较…本质上是无序元组的实现。例如,无序_元组应该有一个与无序_元组兼容的底层表示?(Boost.Fusion概述)如果是这样,这是一个相当复杂的问题所需的用法似乎非常类似于
    fusion::set
    !然而,根据我对集合的经验,它们传统上是间接的堆内存,而元组则完全包含在堆栈中(但我承认我对Boost实现知之甚少,所以如果我错了,请纠正我!)本质上,这个XY问题中的“Y”是我想要一个可以接受
    对象的统一函数,
    向其添加
    ,并将其添加到
    对象的向量中。类似地,我想获取一个
    对象
    ,添加一个
    ,然后仍然映射到
    对象
    向量。在任何情况下,感谢a ton:]Boost.Fusion没有使用堆,它的集合(与所有容器一样)只是一个美化的元组/*我想要一个统一的函数,它可以接受一个
    对象
    ,向它添加一个
    ,然后将它添加到
    对象的向量
    */Fusion就是这样做的。请参阅有关变异函数/元函数的部分。