Variadische Vorlagen sind sehr nützlich für rekursive Operationen. In diesem Fall möchte ich, dass jeder rekursive Aufruf mit zwei Argumenten arbeitet, sodass ich nicht immer dieselbe Funktion aufrufen muss. Um dies zu erreichen kann ich schreiben:Gruppen von Argumenten in einer Variadic-Vorlage übergeben
f() {}
template<typename M,
typename N,
typename... Rest>
f(M arg1, N arg2, Rest... rest)
{
doStuff(arg1, arg2);
f(rest);
}
Dann würde ich diese als solche nennen:
f(arg1a, arg1b,
arg2a, arg2b,
arg3a, arg3b);
jedoch, wenn der Anruf nicht so schön formatiert ist, und alle Argumente sind auf einer Linie, oder Die Spalte wird an der falschen Stelle geteilt, sie wird ziemlich unlesbar. Besonders wenn der Anruf ein Dutzend Paare enthält. Ich habe versucht, hier Abhilfe zu schaffen, indem ein Parameter Pack von Paaren erfordert in weitergegeben werden würde ich die Funktion gerne haben wie folgt aufgerufen werden:.
f({arg1a, arg1b},
{arg2a, arg2b},
{arg3a, arg3b});
Dies scheint vor allem zu sein Versagen als die Initialisiererliste nicht bekommt zu einem Paar abgeleitet. Ich kann make_pair für jeden Satz von Argumenten aufrufen, aber das löst nur ein Lesbarkeitsproblem mit einem anderen Lesbarkeitsproblem. Gibt es eine Möglichkeit, diese Art von Aufrufsyntax zum Laufen zu bringen? Die Argumente sind nicht über Paare oder Paare hinweg gleich.
Können 'arg1a',' arg1b', 'arg2a',' arg2b', ... alle verschiedene Typen sein? – NathanOliver
Ja. In meinem Fall sind sie alle Mitgliedsfunktionszeiger für Qt-Verbindungen, aber jede Funktion kann verschiedene Argumente annehmen. – TheLoneMilkMan
OK. AFAIK die Sprache hat keine Möglichkeit, dies zu tun. '{arg1a, arg1b}' hat keinen Typ, daher können Sie keinen ableiten. – NathanOliver