Ответ 1
Короткий ответ: вы не можете.
Длинный ответ: вы не можете. С++ - это статически типизированный язык, что означает, что вы должны определить тип во время компиляции. Python динамически типизируется, поэтому тип объекта может меняться от линии к строке.
Если вы хотите получить некоторые данные от пользователя, но вы можете просто использовать строку.
Например, если вы хотите получить целочисленный ввод от пользователя:
int n;
std::cin >> n;
Поплавковый ввод:
float x;
std::cin >> x;
И так далее. Обратите внимание на эти два случая, если пользователь вводит что-то, отличное от целого числа или float, вам нужно будет проверить флаги std:: cin, чтобы увидеть, была ли ошибка.
Но вам нужно сообщить пользователю "Введите целое число сейчас" или "Ввести плавать сейчас". Вы не можете просто принять произвольный тип. Вместо этого создайте свой код, чтобы у вас были альтернативные пути кода для ввода целых чисел или с плавающей запятой. Или принудительно выполните одно или другое, и напечатайте сообщение об ошибке, когда они вводят неправильный тип ввода.
Не записывайте свой код, как на Python. Идиоматический код Python не является идиоматическим кодом на С++, и способ, которым вы выполняете, не будет выглядеть одинаково.
В С++ способ получения произвольного ввода будет выглядеть так:
std::string input;
std::cin >> input;
if (IsInteger(input))
{
// do stuff with integer
}
else if (IsFloat(input))
{
// do stuff with float
}
else
{
std::cout << "Bad Input!" << std::endl;
}
Изменить: в качестве MSalters указано в комментарии. Фактически вы можете использовать boost::lexical_cast<T>(expr)
, чтобы передать строковое представление некоторому типу T (где T обычно является чем-то вроде int, float, double и т.д.). Обратите внимание, что вам, вероятно, еще придется сделать некоторые проверки, чтобы увидеть, является ли expr
целым, плавающим или иным образом.