【发布时间】:2018-06-25 18:53: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
或者实际上我可以在运行时使用的任何其他足够接近的东西:)
【问题讨论】:
-
模板是编译时结构。如果集合也是编译时的东西,这可能是可能的,但你不能在运行时制作编译时的东西。
-
并非如此。类型必须在编译时已知。您可以使用的一件事是
std::variant/std::any和std::visit。 -
@PiotrK,如果性能无关紧要,可以从
std::vector<std::any>和一些标签类型中变出一个怪物。 -
@PiotrK,我会在我的回答中使用
std::any。之后我会实施并尝试一下。 -
某种元组?
标签: c++ templates collections metaprogramming