2013-02-23 14 views
8

W C++ 11 możliwe jest posiadanie dwóch szablonów variadycznych dla jednej funkcji?Dwa szablony variadyczne dla jednej funkcji?

Jeśli nie, to nie podstęp, aby napisać coś takiego:

template <class... Types, class... Args> 
void f(const std::tuple<Types...>& t, Args&&... args) 
+0

To znaczy, 'template void f (A1 && ... a1, A2 && ... a2) '? – Yakk

+0

Zastanawiam się, czy nie źle zrozumiałem pytanie: –

+0

@Yakk: Myślę, że ten, który piszesz, nie jest legalny (kompilator nie ma żadnego znaczenia, aby "wyciąć" gdzieś pomiędzy A1 i A2). – Vincent

Odpowiedz

12

to całkowicie legalne:

#include <tuple> 

using namespace std; 

template <class... Types, class... Args> 
void f(const std::tuple<Types...>& t, Args&&... args) 
{ 
    // Whatever... 
} 

int main() 
{ 
    std::tuple<int, double, bool> t(42, 3.14, false); 
    f(t, "hello", true, 42, 1.0); 

    return 0; 
} 
+0

Dzięki! Nie wiedziałem, że to legalne i myślałem, że potrzebuje jakiegoś metaprogramowania hackowania. – Vincent

Powiązane problemy