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

161
23 февраля 2019, 08:10

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

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

Например, так:

template<typename... Args>
void print(const Args&... args) {
    auto f{[](auto&& x) { cout << x << " "; }};
    (f(args),...);
}

Разделитель можно передать и как параметр:

template<typename... Args>
void print(const char * delim, const Args&... args) {
    auto f{[delim](auto&& x) { cout << x << delim; }};
    (f(args),...);
}

Чтоб не добавлять разделитель после последнего вывода - можно выкрутиться типа такого:

template<typename... Args>
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),...);
}

(Думаю, можно и красивее... но, что в голову первым пришло :))

READ ALSO
Ошибка линковки библотеки (связка C++, boost, python)

Ошибка линковки библотеки (связка C++, boost, python)

Собственно следовал по пути автора с целью получить библиотеку с расчетной частью на С++ и всем остальным на PythonПользуюсь Clion 2018

189
unicode символы в переменных

unicode символы в переменных

Можно ли как-то в gcc использовать названия переменных с unicode символами? Разрешено ли это стандартом?

140
К каким объектам можно применять moveToThread

К каким объектам можно применять moveToThread

Допустимо ли применять moveToThread к объекту, созданному на стеке? Например, так:

139
Узнать индекс элемента контейнера

Узнать индекс элемента контейнера

Хочу написать параллельный for_each, но внутри мне нужно знать индекс текущего обрабатываемого элементаКак его узнать без data race?

172