C++ 中的整数到模板类型集合

Integer to template type collection in C++

在 C++ 中是否有任何方法可以创建将整数与模板匹配的运行时可修改集合 type

首先我想:

std::map<uint32_t, std::type_index> type;

但是std::type_index用处很小。我需要能够按该类型进行转换并将其用作 std::is_convertible

的参数

所以 api 应该可以这样:

my_collection.add<1234, std::string>();
my_collection.get<1234>()::type // type is std::string

或者实际上我可以在运行时使用的任何其他足够接近的东西:)

没有

如果您支持的类型列表可以有限且集中地枚举,则可以使用 std::variantboost::variant 或您自己的列表。

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

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

您可以组合使用上述方法。

否则,您将进入运行时编译动态 C++ 库并传递结果的世界,and/orraw C++ 及其源代码。进行即时编译。

所有这一切都将取决于您作为 "solution" 想出的确切的实际问题;可能会有一个相关问题,您的答案是 "yes",而该相关问题可能是您实际需要解决的问题。

但是你提出的问题的答案很简单"No"。