8

In C++ 11 ist es möglich, zwei variadic Vorlagen für eine einzelne Funktion zu haben?Zwei variadische Vorlagen für eine einzelne Funktion?

Wenn nicht, gibt es einen Trick, so etwas zu schreiben:

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

Sie meinen 'template Leere f (A1 && ... a1, A2 && ... a2) '? – Yakk

+0

Ich frage mich, ob ich die Frage nicht falsch verstanden habe –

+0

@Yakk: Ich denke, dass derjenige, den Sie schreiben, nicht legal ist (der Compiler hat keine Mittel, irgendwo zwischen A1 und A2 "zu schneiden"). – Vincent

Antwort

12

Das vollkommen legal ist:

#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

Danke! Ich wusste nicht, dass das legal war und ich dachte, dass es eine Art Metaprogrammierungs-Hack brauchte. – Vincent