Search code examples
c++c++11templatesc++17parameter-pack

How to expand the initializer list parameters pack?


Codes like:

template <typename... type>
void print(type... pack) {
    ((std::cout << pack << " "), ...);
}

But I have parameters like: { {1, 2, 3}, {4, 5, 6} }

So how can I pass this to the function ? Or, how to expand the parameters pack like this ?


Solution

  • But I have parameters like: { {1, 2, 3}, {4, 5, 6} }

    You can pack them into std::tuples

    #include<iostream>
    #include<tuple>
    
    template <typename... Tuples>
    void print_tuples(Tuples... tuples) {
      (std::apply([](auto... args) {
        ((std::cout << args << " "), ...);
      }, tuples), ...);
    }
    

    Then

    print_tuples(std::tuple{1, 2, 3}, std::tuple{4, 5, 6});
    

    Demo