Страницы

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

вторник, 28 января 2020 г.

шаблоны с переменными аргументами

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


Задача:


Принять в функцию неопределенное количество элементов с разными типами.
Засунуть все принятое в stringstream


Вопрос:


Как раскрыть список аргументов и засунуть в stringstream?


Может, нужно использовать другие инструменты для этой задачи? Подскажите пожалуйста
какие(просьба, вариант с ostream не предлагать)?

  template
            void tfunc(const Arguments & ... args)
            {
                std::stringstream ss;
                //ss<


Ответы

Ответ 1



Это легко делается при помощи fold expression: template void tfunc(Arguments const & ... args) { std::stringstream ss; (ss << ... << args); } online compiler

Ответ 2



Вы можете воспользоваться временным массивом для распаковки пакета параметров. template std::string foo(Args const & ... args) { std::stringstream ss; using arr_t = int[sizeof...(args)];//Тип массива для удобства arr_t{((ss << args << ' '), 0)...};//Создаем временный массив return ss.str(); }

Ответ 3



Ну, например, так: void tfunc(stringstream&) {} template void tfunc(stringstream& s, T t, Arguments ... args) { s << t << " "; tfunc(s,args...); } int main(int argc, const char * argv[]) { stringstream s; tfunc(s,1,0.5,",,,"); cout << s.str() << endl; }

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

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