Синтаксис функции System.out.println в переполнении стека

Я хочу создать функцию в C ++, используя cout, которая имеет то же самое, что и функция println в java. Это означает, что вызов должен быть примерно таким:

int a=5
println("A string" + a);

переменная a должна иметь любой базовый тип.
Какой параметр у меня должен быть в этом случае и как он будет работать?

Спасибо

4

Решение

Как уже указывало 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;
}

Но я бы рекомендовал взглянуть на повышение :: формат. Я думаю, эта библиотека будет делать то, что вы хотите.

6

Другие решения

Многие опускают голос, но это не объясняет, почему то, что вы спрашиваете, неверно.

У вас есть два варианта здесь:

  1. Вы можете сделать шаблон println(T val) функция, которая принимает любой тип, который вам нравится, целые, двойные и т. д., и вы можете напечатать их в этой функции.

  2. Однако, что вы запрашиваете там: "A string" + a это выражение, которое будет возвращать тип. То, что вы делаете здесь, это добавление const char* и int, Это, к сожалению, не будет делать то, что вы ожидаете, это будет делать арифметика указателей, и в этом конкретном случае даже не скомпилирует. Но для общего случая, скажем, std::string и класс под названием Foo, компилятор будет искать operator+ перегрузка которые могут соединить эти две вещи.

    Ваш второй вариант, но немного более опасный, это иметь println функция, которая либо принимает std::string или же const char* и определить все различные операции оператора +, которые вы можете захотеть. Однако я не рекомендую это делать, поскольку операция по умолчанию между указателем и целым числом заключается в выполнении арифметики указателя, что очень полезно.

Я рекомендую начать с шаблонной функции и посмотреть, что из этого получится.

2

По вопросам рекламы [email protected]