Ich kenne bereits die stdarg.h
Weg, um eine Funktion mit variablen Argumenten in C++ wie here zum Beispiel diskutiert. Ich weiß auch C++ 11 Standard hat variadic Vorlagen wie erklärt here.Eine Funktion mit variabler Anzahl von Argumenten mit bekannten Typen, die C++ 11-Wege
Aber in beiden oben genannten Schemata wissen wir nicht (und wir können nicht erzwingen) Argumenttypen in der Kompilierungszeit afaik. Was ich suche ist, variable Argumente von bekannten Typen zu einer Funktion zu übergeben. Ich denke, dass dies getan werden kann, weil ich über sie gelesen here:
Variadische Vorlagen, die auch Funktionen zum Erstellen verwendet werden können, die eine variable Anzahl von Argumenten entgegennehmen, sind oft die bessere Wahl, da sie keine Beschränkungen auferlegt werden die Arten von Argumenten, führen keine Integral- und Gleitkomma-Aktionen durch und sind typsicher.
Ist es möglich? Wenn ja, wie kann ich das tun?
Ich denke, es ging nur um mein Missverständnis. Ich kannte den zweiten Weg, aber ich dachte immer, es gäbe keine Kontrolle über die Art der Parameter. Das ist nicht wahr. Da die Funktion einen ersten Parameter eines bekannten Typs (String hier) verwendet, wird sie implizit gezwungen, ihre Parameter dieses Typs zu haben. Vielen Dank. – melmi
Sie möchten vielleicht zuerst die zweite Code-Box verschieben. Es ist eine sehr gute Lösung für das Problem, während die 'initializer_list' Version nicht ist. Ich wollte eine große, komplexe Sache mit SFINAE und so veröffentlichen, aber das ist viel vernünftiger. –
@nosid Sie können tatsächlich geschweifte Klammern vermeiden, wenn Sie sowohl die std :: initializer_list als auch die variadic-Vorlagen-Methode mischen, indem Sie einen variadischen Template-Wrapper um die std :: initializer_list-Version erstellen, wie folgt: [siehe on coliru] (http: //coliru.stacked-crooked.com/a/4baef67192a0310c). –