Страницы

Поиск по вопросам

понедельник, 30 марта 2020 г.

Разделить вывод в std::cout

#cpp #шаблоны_с++


Написал функцию для вывода произвольного количества аргументов. Как передать в неё
разделитель (пробел, например) так, чтобы вывод осуществлялся через разделитель, а
не слитно?

template
void print(const Args&... args) {
    (std::cout << ... << args);
}

    


Ответы

Ответ 1



Например, так: template void print(const Args&... args) { auto f{[](auto&& x) { cout << x << " "; }}; (f(args),...); } Разделитель можно передать и как параметр: template void print(const char * delim, const Args&... args) { auto f{[delim](auto&& x) { cout << x << delim; }}; (f(args),...); } Чтоб не добавлять разделитель после последнего вывода - можно выкрутиться типа такого: template void print(const char * delim, const Args&... args) { int count = sizeof...(args); auto f{[delim, &count](auto&& x) { cout << x; if (--count) cout << delim; }}; (f(args),...); } (Думаю, можно и красивее... но, что в голову первым пришло :))

Комментариев нет:

Отправить комментарий