используя 'auto' в std :: map - PullRequest
       41

используя 'auto' в std :: map

1 голос
/ 09 апреля 2019

Я анализирую файл 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 );
}

Или есть лучший способ сделать это?Спасибо!

1 Ответ

1 голос
/ 09 апреля 2019

Чтобы добиться того, что вы просите, используйте:

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
}
...