Я хочу создать функцию в C ++, используя cout, которая имеет то же самое, что и функция println в java. Это означает, что вызов должен быть примерно таким:
int a=5
println("A string" + a);
переменная a должна иметь любой базовый тип.
Какой параметр у меня должен быть в этом случае и как он будет работать?
Спасибо
Как уже указывало larsmans, java перегружен оператором +. Таким образом, вы можете объединить строки с целым числом. Это также возможно в C ++, но не из коробки для всех типов.
Вы можете использовать шаблонные функции, как это.
#include <iostream>
using namespace std;
template <typename T>
void printer(T t)
{
cout << t << endl;
}
template <typename T, typename ...U>
void printer(T t, U ...u)
{
cout << t;
printer(u...);
}int main()
{
int a=5;
printer("A string ", a);
return 0;
}
Но я бы рекомендовал взглянуть на повышение :: формат. Я думаю, эта библиотека будет делать то, что вы хотите.
Многие опускают голос, но это не объясняет, почему то, что вы спрашиваете, неверно.
У вас есть два варианта здесь:
Вы можете сделать шаблон println(T val)
функция, которая принимает любой тип, который вам нравится, целые, двойные и т. д., и вы можете напечатать их в этой функции.
Однако, что вы запрашиваете там: "A string" + a
это выражение, которое будет возвращать тип. То, что вы делаете здесь, это добавление const char*
и int
, Это, к сожалению, не будет делать то, что вы ожидаете, это будет делать арифметика указателей, и в этом конкретном случае даже не скомпилирует. Но для общего случая, скажем, std::string
и класс под названием Foo
, компилятор будет искать operator+
перегрузка которые могут соединить эти две вещи.
Ваш второй вариант, но немного более опасный, это иметь println
функция, которая либо принимает std::string
или же const char*
и определить все различные операции оператора +, которые вы можете захотеть. Однако я не рекомендую это делать, поскольку операция по умолчанию между указателем и целым числом заключается в выполнении арифметики указателя, что очень полезно.
Я рекомендую начать с шаблонной функции и посмотреть, что из этого получится.