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

195
29 декабря 2018, 06:30

Задача:

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

Вопрос:

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

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

  template<typename ... Arguments>
            void tfunc(const Arguments & ... args)
            {
                std::stringstream ss;
                //ss<<args; 
            }
Answer 1

Это легко делается при помощи fold expression:

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

online compiler

Answer 2

Вы можете воспользоваться временным массивом для распаковки пакета параметров.

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

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

void tfunc(stringstream&)
{}
template<typename T, typename ... Arguments>
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;
}
READ ALSO
Считывание информации из файла С++

Считывание информации из файла С++

пишу программу, необходимо считывать информацию из txt файла и записывать информацию в стрктуру

228
Проблема с z-lib

Проблема с z-lib

Допустим я использую Bullet Physics у которого лицензия Z-Lib, в пунктах этой лицензии упоминается что я не имею право присваивать этот продукт себе,...

219
308 в степени 611 mod 899

308 в степени 611 mod 899

Как вычислить значение настолько "большого" выражения, как 308^611 (mod 899)Просто делаю алгоритм RSA на C++

214
Вызвать функцию в разных потоках C++

Вызвать функцию в разных потоках C++

Можно ли выполнять разные участки кода одной функции в разных потоках? Например:

254