Igel_SK's blog

By Igel_SK, 10 years ago, In Russian

Сел почитать 4-е издание Страуструпа и наткнулся на функцию, которую удобно использовать для отладочного вывода, если надоело постоянное << ' ' << между переменными в выражениях вроде cerr << variable1 << ' ' << variable2 << ' ' << variable3 << endl; и хочется немного лучшей читабельности.

Функция принимает любое количество аргументов любого типа, который можно вывести стандартным cerr'ом, выводит их подряд через пробел и затем переходит на новую строку.

void dout() { cerr << endl; }

template <typename Head, typename... Tail>
void dout(Head H, Tail... T) {
  cerr << H << ' ';
  dout(T...);
}

Пример использования (str == "ololo"):

dout(123,str,4.0);
dout();
dout(1,2);

/* Prints:
123 ololo 4

1 2
*/

То же самое обычным способом:

cerr << 123 << ' ' << str << ' ' << 4.0 << endl;
cerr << endl;
cerr << 1 << ' ' << 2 << endl;
  • Vote: I like it
  • +137
  • Vote: I do not like it