Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to iterate over variadic function with std:string arguments?

Tags:

c++

variadic

void foo(std::string arg, ...) {

   // do something with every argument

}

Lets say I want to be able to take every string argument and append an exclamation mark before printing it out on a new line.

like image 575
James Avatar asked Dec 15 '22 01:12

James


1 Answers

The best way is to use parameters pack. For example:

#include <iostream>

// Modify single string.
void foo(std::string& arg)
{
    arg.append("!");
}

// Modify multiple strings. Here we use parameters pack by `...T`
template<typename ...T>
void foo(std::string& arg, T&... args)
{
    foo(arg);
    foo(args...);
}

int main()
{
    // Lets make a test

    std::string s1 = "qwe";
    std::string s2 = "asd";

    foo(s1, s2);

    std::cout << s1 << std::endl << s2 << std::endl;

    return 0;
}

This will print out:

qwe!
asd!
like image 159
stas.yaranov Avatar answered Dec 16 '22 15:12

stas.yaranov