Wie kann ich die Anzahl der Argumente für eine variable Vorlagenfunktion ermitteln?
dh:
template<typename... T>
void f(const T&... t)
{
int n = number_of_args(t);
...
}
Was ist der beste Weg, um number_of_args
das oben genannte zu implementieren ?
c++
c++11
variadic-templates
variadic-functions
Andrew Tomazos
quelle
quelle
sizeof...(T)
.Antworten:
Schreiben Sie einfach Folgendes:
Beachten Sie, dass dies
n
ein konstanter Ausdruck ist (dh zur Kompilierungszeit bekannt ist). Dies bedeutet, dass Sie ihn verwenden können, wenn ein konstanter Ausdruck erforderlich ist, z.Beachten Sie, dass Sie Folgendes tun müssen , wenn Sie die aggregierte Größe der gepackten Typen berechnen möchten (im Gegensatz zur Anzahl der Typen im Paket):
dann mach das:
In C ++ 17 (und höher) ist die Berechnung der Summe der Größen der Typen mithilfe des Fold- Ausdrucks viel einfacher :
Hoffentlich hilft das.
quelle
sizeof...
undconstexpr
. :)sizeof...
tatsächlich die Anzahl der Argumente und nicht die kombinierte Speichergröße aller Argumente zurück (wie diessizeof
bei einem Array der Fall wäre)?sizeof ...(T)
Gibt die Anzahl der eingepackten Typen zurückT
. Wenn Sie die aggregierte Größe der gepackten Typen berechnen möchten, müssen Sie Folgendes tun: ideone.com/udggBk Ich habe dies auch in meiner Antwort hinzugefügt.return (0 + ... + sizeof(t));