Я только начинаю изучать C ++ и испытываю трудности с передачей параметров функции. Например, я использую свою собственную функцию печати, в которой вы просто помещаете строку в параметры и она записывает ее на консоль.
//Print Function
void print(std::string message = "") {
std::cout << message << std::endl;
}
Однако, потому что я объявляю это как std::string
переменная, если я передам ей число, оно не будет напечатано. В конечном итоге я хотел бы сделать систему ввода и печати, как в Python. Как мне пойти по этому поводу? Есть ли способ преобразовать параметры в строку? Или какое-то другое решение. Другая функция с похожими проблемами — это моя функция ввода:
//Input function (Enter does not work without text, space is not text)
std::string input(const char* message = "") {
std::cout << message;
std::string x;
std::cin >> x;
return x;
}
Это не позволяет возврату быть целым, что усложняет вычисления с использованием ввода. Любая помощь приветствуется заранее!
Моисей
Кроме того template
, если ваш компилятор поддерживает C ++ 14, вы также можете использовать auto
с лямбда-функцией. Вы можете просто написать все это в основной функции.
auto print = [](const auto& message) {std::cout << message << std::endl;};
print(1); //1
print("AAA"); //AAA
Обратите внимание, что в отличие от Python, когда вы хотите что-то напечатать, вам не нужно конвертировать его в string
первый. Пока то, что вы хотите напечатать, перегружено cout
, Вы можете просто cout
Это. И используя template
или же auto
не меняет тот факт, что все в C ++ статически типизировано, просто компилятор автоматически создаст для вас разные версии функций перегрузки.
РЕДАКТИРОВАТЬ
Как отметил @Peter в разделе комментариев, говоря:cout
что-то, что может быть перегружено, совершенно неверно «, и, точнее сказать, перегрузка operator<<
для ostream
и соответствующий класс
Здесь могут быть полезны шаблоны ++.
//Print Function
template <typename T>
void print(const T& message) {
std::cout << message << std::endl;
}
void print() {
std::cout << std::endl;
}
Обратите внимание, я удалил значение аргумента по умолчанию и использовал перегруженную функцию. При пропущенном пустом аргументе тип шаблона не может быть выведен. print
не работает с контейнерами, и вам нужно больше усилий для печати контейнеров, в Python это работает из коробки.
//Input function (Enter does not work without text, space is not text)
template <typename T>
T input(const char* message = "")
{
std::cout << message;
T x;
std::cin >> x;
return x;
}
Использование: int n = input<int>("Input number:");
,
В качестве альтернативы я нашел способ сделать это без использования лямбды:
void print(int message) {
std::cout << message << std::endl;
};
void print(float message) {
std::cout << message << std::endl;
};
void print(std::string message) {
std::cout << message << std::endl;
};
Делая несколько функций с одним и тем же именем, он будет использовать то, что работает, поэтому любой ввод (3.14, 8, «Hello») будет работать и использовать соответствующую функцию.