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::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++ 的世界。进行即时编译。
所有这些都取决于您提出这个“解决方案”的具体实际问题是什么;可能会有一个相关问题,您的答案是"is",并且该相关问题可能就是您实际需要解决的问题。
但是您提出的问题的答案很简单:“不”。
关于c++ - C++ 中的整数到模板类型集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51030139/