angenommen ich habe eine Funktion mit einer variablen Menge an Parametern, also etwa
Code: Alles auswählen
Mesh join(Mesh& m1, Mesh& m2, ... Mesh& mn);
Meine erster Gedanke waren variadic-templates. Die sind aber grässlich zu schreiben und zu lesen, alleine schon weil man immer mindestens 2 Funktionen braucht. Die zweite Idee ist, einen Container an Meshs zu übergeben und mir scheint, dass sich da eine initializer_list am ehesten anbiete. Die macht zum einen die Implementierung kompakt und übersichtlich (eine for-loop über alle Elemente) und zum anderen ist das Interface auch recht nett (verglichen mit z.B. verschachtelten Aufrufen einer Funktion die jeweils 2 Meshs kombiniert).
Aber wie sieht das ganze Performance technisch aus? Ist initializer_list so light-weight wie es wird? Ich vermute mal, dass es zumindest besser (oder halt gleich) als alle anderen Container (vector z.B.) ist. Aber verglichen mit variadic templates schätze ich, , dass es ein Problem sein könnte, dass die Funktion nur einmal kompiliert wird. Wenn man nur 2 oder 3 Meshs kombinieren will hat man trotzdem den Overhead von der Schleife. Oder könnte der Kompilier hier irgendeine Chance haben etwas zu optimieren? Andererseits sollte der Overhead zumindest in diesem Fall eigentlich minimal sein, da die Funktion hier tatsächlich alle Vertices kopieren soll.
Was sind eure Meinungen / best practises zum Thema 'variable Argumente'?