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

时间:2018-06-25 18:53:17

标签: c++ templates collections metaprogramming

在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

或者实际上我可以在运行时使用的其他足够接近的方法:)

1 个答案:

答案 0 :(得分:2)

否。

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

如果可以有限地集中枚举所支持类型的操作列表,则可以使用std::anyboost::any以及类型擦除技术来解决您的问题。 Here is an overly generic system to type erase nearly any single-dispatch operation

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

您可以将以上各项组合在一起。

如果不这样做,您将进入动态C ++库的运行时编译环境,并传递结果和/或将C ++与源代码一起传递。即时进行编译。

所有这些都取决于您将其作为“解决方案”提出的确切实际问题;可能会有一个相关的问题,您的答案是“是”,而这个相关的问题可能就是您实际需要解决的问题。

但是您提出的问题的答案只是“否”。