8

In C++ 11 è possibile avere due modelli variadici per una singola funzione?Due modelli variadici per una singola funzione?

In caso contrario, c'è un trucco per scrivere qualcosa di simile:

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

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

+0

Mi chiedo se non ho frainteso la domanda –

+0

@Yakk: Penso che quello che scrivi non sia legale (il compilatore non ha il significato di "tagliare" da qualche parte tra A1 e A2). – Vincent

risposta

12

Questo è perfettamente legale:

#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

Grazie! Non sapevo che fosse legale e pensavo che servisse una sorta di modifica metaprogrammante. – Vincent