在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
或者实际上我可以在运行时使用的其他足够接近的方法:)
答案 0 :(得分:2)
否。
如果可以有限地集中枚举支持的类型列表,则可以使用std::variant
或boost::variant
或自己动手。
如果可以有限地集中枚举所支持类型的操作列表,则可以使用std::any
或boost::any
以及类型擦除技术来解决您的问题。 Here is an overly generic system to type erase nearly any single-dispatch operation。
您可以使用std::any
或boots::any
来获得非中心但局部受限的类型列表,但是该位置仅在每个枚举位置处已知的确切类型起作用。
您可以将以上各项组合在一起。
如果不这样做,您将进入动态C ++库的运行时编译环境,并传递结果和/或将C ++与源代码一起传递。即时进行编译。
所有这些都取决于您将其作为“解决方案”提出的确切实际问题;可能会有一个相关的问题,您的答案是“是”,而这个相关的问题可能就是您实际需要解决的问题。
但是您提出的问题的答案只是“否”。