在 std::map 中使用 'auto'
using 'auto' in std::map
我正在解析一个 JSON 文件,值可以由整数、字符串或浮点数组成。通常我有一个这样定义的地图:
std::map<std::string, std::string> myMap;
问题是如果可以有不同的数据类型,我不清楚如何使用地图,我试过:
std::map<std::string, auto> myMap;
但我得到一个错误:
'auto' is not allowed here
我有什么方法可以将它用于不同的数据类型,还是我需要定义一个对象,它可以包含不同的数据类型,例如:
Class MyObject
{
private:
int integerValue;
std::string stringValue;
public:
void setValue( std::string value, int type );
}
MyObject::setValue( std::string value, int type )
{
if( type == 0 )
stringValue = value;
else if( type == 1 )
integerValue = stoi( value );
}
或者有更好的方法吗?谢谢!
为了达到你的要求,使用:
std::map<std::string, std::any> myMap;
例如:
#include <map>
#include <string>
#include <any> // Since C++17
main()
{
std::map<std::string, std::any> myMap;
std::string strName{ "Darth Vader" };
int nYear = 1977;
myMap["Name"] = strName;
myMap["Year"] = nYear;
std::string strS = std::any_cast<std::string>(myMap["Name"]); // = "Darth Vader"
int nI = std::any_cast<int>(myMap["Year"]); // = 1977
}
我正在解析一个 JSON 文件,值可以由整数、字符串或浮点数组成。通常我有一个这样定义的地图:
std::map<std::string, std::string> myMap;
问题是如果可以有不同的数据类型,我不清楚如何使用地图,我试过:
std::map<std::string, auto> myMap;
但我得到一个错误:
'auto' is not allowed here
我有什么方法可以将它用于不同的数据类型,还是我需要定义一个对象,它可以包含不同的数据类型,例如:
Class MyObject
{
private:
int integerValue;
std::string stringValue;
public:
void setValue( std::string value, int type );
}
MyObject::setValue( std::string value, int type )
{
if( type == 0 )
stringValue = value;
else if( type == 1 )
integerValue = stoi( value );
}
或者有更好的方法吗?谢谢!
为了达到你的要求,使用:
std::map<std::string, std::any> myMap;
例如:
#include <map>
#include <string>
#include <any> // Since C++17
main()
{
std::map<std::string, std::any> myMap;
std::string strName{ "Darth Vader" };
int nYear = 1977;
myMap["Name"] = strName;
myMap["Year"] = nYear;
std::string strS = std::any_cast<std::string>(myMap["Name"]); // = "Darth Vader"
int nI = std::any_cast<int>(myMap["Year"]); // = 1977
}