整数到模板类型集合(C++)

Integer to template type collection in C++

本文关键字:C++ 集合 类型 整数      更新时间:2023-10-16

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

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

No.

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

如果可以有限且集中地枚举对所支持类型的操作列表,则可以使用std::anyboost::any以及类型擦除技术来解决您的问题。 这是一个过于通用的系统,用于键入擦除几乎任何单次调度操作。

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

您可以执行上述操作的组合。

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

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

但是,您提出的问题的答案只是"否"。