【发布时间】:2021-01-25 22:11:40
【问题描述】:
来自非静态类型语言,我有时会遇到类型约束。
我正在寻找一种将我的所有对象存储在哈希图中的方法。问题是,父类使用模板,因为一些子类返回不同大小和类型的数组。
template<typename T, std::size_t Size>
class Module {
public:
virtual std::array<T, Size> getValues() = 0;
};
class SwitchModule : public Module<bool, 2> {
std::array<bool, 2> getValues() override;
};
class TemperatureModule : public Module<float, 4> {
std::array<float, 4> getValues() override;
};
这一切都很好,直到我想将我所有的 SwitchModules 和 TemperatureModules 添加到哈希映射中。由于我必须使用哈希映射的基类,编译器希望我提供 T 和 Size。这不起作用:
std::unordered_map<std::string, Module> modulesMap;
是否有巧妙的解决方法将SwitchModule 和TemperatureModule 保存在unordered_map 中?谢谢。
【问题讨论】:
-
您希望能够在地图中存储任何
Module<T,Value>? -
是的,这正是我想要做的。也许我应该改一下标题。
-
如果您仅需要能够存储
SwitchModule和TemperatureModule,您可以使用std::variant。如果您希望能够存储Module的任意实例,那就更麻烦了。 -
SwitchModule和TemperatureModule只是我真正想要的一个简单示例,因此将所有类型的模块保存在地图中。不过谢谢你的提示。 -
那么您将需要
std::variant或std::any。 C++ 中的容器包含同质对象,但类模板的不同实例化会生成一组异构对象。
标签: c++ templates unordered-map