#cpp #шаблоны_с++
Задача: Принять в функцию неопределенное количество элементов с разными типами. Засунуть все принятое в stringstream Вопрос: Как раскрыть список аргументов и засунуть в stringstream? Может, нужно использовать другие инструменты для этой задачи? Подскажите пожалуйста какие(просьба, вариант с ostream не предлагать)? templatevoid tfunc(const Arguments & ... args) { std::stringstream ss; //ss< Ответы
Ответ 1
Это легко делается при помощи fold expression: templatevoid tfunc(Arguments const & ... args) { std::stringstream ss; (ss << ... << args); } online compiler Ответ 2
Вы можете воспользоваться временным массивом для распаковки пакета параметров. templatestd::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&) {} templatevoid 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; }
Комментариев нет:
Отправить комментарий