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

标签 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

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

最佳答案

没有。

如果您支持的类型列表可以有限且集中地枚举,则可以使用 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++ 的世界。进行即时编译。

所有这些都取决于您提出这个“解决方案”的具体实际问题是什么;可能会有一个相关问题,您的答案是"is",并且该相关问题可能就是您实际需要解决的问题。

但是您提出的问题的答案很简单:“不”。

关于c++ - C++ 中的整数到模板类型集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51030139/

相关文章:

c++ - CRITICAL SECTION和TCriticalSection有什么关系

c++ - 将普通功能更改为模板会产生任何正/负差异吗?

javascript - Vuejs未定义属性错误但已定义

c++ - 调用基类函数时强制类名?

C# - 如何用一个键和两个值编写一个集合(字典?)

c++ - 取消引用 C++ STL 列表迭代器

c++ - Qt中如何显示图片的颜色分量

c++ - 用于动态代码生成的最可移植库?

php - Laravel Collections 计数结果

javascript - Backbone Collection.reset() 不适用于扩展集合