#cpp #шаблоны_с++
Написал функцию для вывода произвольного количества аргументов. Как передать в неё разделитель (пробел, например) так, чтобы вывод осуществлялся через разделитель, а не слитно? templatevoid print(const Args&... args) { (std::cout << ... << args); }
Ответы
Ответ 1
Например, так: templatevoid 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),...); } (Думаю, можно и красивее... но, что в голову первым пришло :))
Комментариев нет:
Отправить комментарий