Definition von "pattern" für die Erweiterung von Parameterpaketen, insbesondere innerhalb eines Funktionsaufrufs

Ich verstehe, dass, wenn rechts neben einem Muster, das ein Parameterpaket enthält, ein Auslassungszeichen (...) angezeigt wird, das Muster für jeden Parameter im Paket einmal erweitert wird. Obwohl ich in der Lage war, isolierte Beispiele von Mustern mit ihrer Erweiterung zu finden, konnte ich keine Definition dessen finden, was ein Muster ausmacht. Wie ich sehe, spielt das Leerzeichen bei der Definition des Musters keine Rolle, Klammern jedoch. Zum Beispiel in diesem Beispiel:

template<typename ... Ts>
void func(Ts)
{
    do_something(validate(Ts)...);
}

dasdo_something line wird erweitert zu:

    do_something(validate(var1), validate(var2), validate(var3))

wennTs repräsentiert zufällig drei Variablen. Im Gegensatz

    do_something(validate(Ts...));

würde erweitert werden zu:

    do_something(validate(var1, var2, var3));

So haben Klammern eindeutig damit zu tun, wo das Muster beginnt und endet. Ich kann auch sehen, dass Whitespace nicht funktioniert. Aber das bringt mich nur so weit. Ich möchte genau wissen, was ein Muster ausmacht und wie es erweitert wird. Ich habe versucht, den C ++ - Standard zu durchsuchen, aber zu viele Instanzen von "parameter pack" gefunden, um dies effektiv zu machen. Kann mir jemand eine Definition von "Muster" oder einen Link zu einer Definition oder beides geben?

UPDATE: Um den Umfang meiner Frage einzuschränken, möchte ich mich auf den Fall konzentrieren, in dem ein Muster innerhalb eines Funktionsaufrufs auftritt. Ich habe den Titel entsprechend bearbeitet. Entschuldigung, das habe ich von Anfang an nicht klargestellt.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage