C++ 中的整数到模板类型集合
Integer to template type collection in C++
在 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
以及类型擦除技术可用于解决您的问题。 .
您可以使用 std::any
或 boots::any
来获得非集中但局部有限枚举的类型列表,但只有每个枚举位置已知的确切类型在该位置起作用。
您可以组合使用上述方法。
否则,您将进入运行时编译动态 C++ 库并传递结果的世界,and/orraw C++ 及其源代码。进行即时编译。
所有这一切都将取决于您作为 "solution" 想出的确切的实际问题;可能会有一个相关问题,您的答案是 "yes",而该相关问题可能是您实际需要解决的问题。
但是你提出的问题的答案很简单"No"。
在 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
以及类型擦除技术可用于解决您的问题。
您可以使用 std::any
或 boots::any
来获得非集中但局部有限枚举的类型列表,但只有每个枚举位置已知的确切类型在该位置起作用。
您可以组合使用上述方法。
否则,您将进入运行时编译动态 C++ 库并传递结果的世界,and/orraw C++ 及其源代码。进行即时编译。
所有这一切都将取决于您作为 "solution" 想出的确切的实际问题;可能会有一个相关问题,您的答案是 "yes",而该相关问题可能是您实际需要解决的问题。
但是你提出的问题的答案很简单"No"。