Используя 'auto' в 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 );
}

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

1 ответ

Решение

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

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
}
Другие вопросы по тегам