C+;中的整数到模板类型集合+; < > C++中有没有方法来创建与整数匹配到模板>代码>类型< /COD>?< /P>的运行时可修改集合?

C+;中的整数到模板类型集合+; < > C++中有没有方法来创建与整数匹配到模板>代码>类型< /COD>?< /P>的运行时可修改集合?,c++,templates,collections,metaprogramming,C++,Templates,Collections,Metaprogramming,首先,我想到: std::map<uint32_t, std::type_index> type; 或者我可以在运行时使用的其他足够接近的东西:)否 如果您支持的类型列表可以进行有限和集中枚举,则可以使用std::variant或boost::variant或您自己的卷 如果您支持的类型上的操作列表可以进行有限集中枚举,std::any或boost::any以及类型擦除技术可用于解决您的问题 您可以使用std::any或boots::any来拥有一个非集中但局部有限枚举的类型列表,

首先,我想到:

std::map<uint32_t, std::type_index> type;
或者我可以在运行时使用的其他足够接近的东西:)

如果您支持的类型列表可以进行有限和集中枚举,则可以使用
std::variant
boost::variant
或您自己的卷

如果您支持的类型上的操作列表可以进行有限集中枚举,
std::any
boost::any
以及类型擦除技术可用于解决您的问题

您可以使用
std::any
boots::any
来拥有一个非集中但局部有限枚举的类型列表,但只有在每个枚举位置已知的确切类型在该位置起作用

您可以结合使用上述方法

<>这是动态C++库运行时编译的结果,并将结果和/或C++与源代码一起传递到周围世界。正在进行动态编译

所有这一切都将取决于你的确切的,实际的问题是什么,你提出了这个“解决方案”;可能会有一个相关的问题,你的答案是“是”,而这个相关的问题可能就是你真正需要解决的


但是对于您提出的问题,答案是“不”。

模板是编译时结构。如果集合也是编译时的东西,那么这是可能的,但是不能在运行时生成编译时的东西。类型必须在编译时已知。你可以使用
std::variant
/
std::any
std::visit
@PiotrK,如果性能不重要,你可以从
std::vector
和一些标记类型中变出一个怪物。@PiotrK,我会在回答中使用
std::any
。之后,我将实现并试用它。某种元组?如何使用
boost::any
进行“非中心但局部有限枚举”?我发现了这个答案:它实际上满足了我的问题:)
my_collection.add<1234, std::string>();
my_collection.get<1234>()::type // type is std::string