2

我正在解析一个 JSON 文件,这些值可以由整数、字符串或浮点数组成。通常我有一个这样定义的地图:

 std::map<std::string, std::string> myMap;

问题是如果可以有不同的数据类型,我不清楚如何使用 map,我试过:

 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 );
}

还是有更好的方法来做到这一点?谢谢!

4

1 回答 1

3

为了实现您的要求,请使用:

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
}
于 2019-04-09T15:02:49.600 回答