Krótka odpowiedź: Nie możesz.
Długa odpowiedź: Nie możesz. C++ jest statycznie napisanym językiem, co oznacza, że musisz zdefiniować typ w czasie kompilacji. Python jest wpisywany dynamicznie, więc typ obiektu może zmieniać się z linii na linię.
Jeśli chcesz uzyskać pewne dane wejściowe od użytkownika, możesz po prostu użyć ciągu znaków.
Na przykład, jeśli chcesz uzyskać całkowitą wejściowe od użytkownika: Wejście
int n;
std::cin >> n;
Float:
float x;
std::cin >> x;
i tak dalej. Zanotuj w tych dwóch przypadkach, jeśli użytkownik wprowadzi coś innego niż liczbę całkowitą lub zmienną, będziesz musiał sprawdzić flagę std :: cin, aby sprawdzić, czy wystąpił błąd.
Ale musisz powiedzieć użytkownikowi "Wpisz teraz liczbę całkowitą" lub "Wprowadź teraz zmienną". Nie możesz po prostu zaakceptować jakiegoś dowolnego typu. Zamiast tego zaprojektuj swój kod, aby mieć alternatywne ścieżki kodowe do wprowadzania liczb całkowitych lub zmiennoprzecinkowych. Lub wymuś jeden lub drugi i wydrukuj błąd, gdy podają niewłaściwy typ danych wejściowych.
Nie pisz swojego kodu, tak jak w Pythonie. Kod pseudonimu Idiomatic nie jest idiomatycznym kodem w języku C++, a sposób, w jaki wykonujesz zadania, nie wygląda tak samo.
w C++ sposób, aby uzyskać dowolny wejście będzie wyglądać następująco:
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;
}
EDIT: Jak MSalters zauważył w komentarzu, można faktycznie korzysta boost::lexical_cast<T>(expr)
rzucić reprezentację ciąg do pewnego typu T (Gdzie T jest zwykle czymś w rodzaju int, float, double, itp.). Zauważ, że prawdopodobnie będziesz musiał jeszcze sprawdzić, czy expr
jest liczbą całkowitą, zmiennoprzecinkową lub w inny sposób.
Myślę, że prawdopodobnie potrzebujesz tylko pływaka lub podwójnego. Mogą zawierać liczby całkowite i ułamkowe. –