基本上我想要 MyClass 拥有一个将字段名称(字符串)映射到任何类型的哈希图
值.. 为此,我编写了一个单独的 MyField 类来保存类型和值信息..
这是我到目前为止所拥有的:
template <typename T>
class MyField {
T m_Value;
int m_Size;
}
struct MyClass {
std::map<string, MyField> fields; //ERROR!!!
}
但正如您所看到的,地图声明失败,因为我没有为 MyField 提供类型参数...
所以我想它一定是这样的
std::map< string, MyField<int> > fields;
or
std::map< string, MyField<double> > fields;
但显然这破坏了我的整个目的,因为声明的映射只能保存特定类型的 MyField 。我想要一个可以保存任何类型的 MyField 类的映射。
有什么办法可以实现这个目标..?
这在 C++ 17 中很简单。使用 std::map + std::any + std::any_cast:
#include <map>
#include <string>
#include <any>
int main()
{
std::map<std::string, std::any> notebook;
std::string name{ "Pluto" };
int year = 2015;
notebook["PetName"] = name;
notebook["Born"] = year;
std::string name2 = std::any_cast<std::string>(notebook["PetName"]); // = "Pluto"
int year2 = std::any_cast<int>(notebook["Born"]); // = 2015
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)