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