Ich habe diese variable Struktur zur Bestimmung der Summe der Größe aller übergebenen Typen:
template <typename U, typename... T> struct TotalSizeOf
: std::integral_constant<size_t, sizeof(U) + TotalSizeOf<T...>::value> {};
template <typename U> struct TotalSizeOf<U>
: std::integral_constant<size_t, sizeof(U)> {};
Verwendungszweck:
TotalSizeOf<double, int, char>::value
Die Frage ist, wie ich dies ändere, damit es an einem leeren Parameterpaket arbeiten und zurückkehren kann 0
.
z.B TotalSizeOf<>::value
Derzeit erhalte ich den Fehler error: wrong number of template arguments (0, should be at least 1)
Ich habe nur C ++ 14 zur Verfügung.
Antworten:
Sie müssen sich einfach auch darauf spezialisieren
<>
Beispiel:
quelle
Mit C ++ 17 können Sie dies ohne aufwändige Metaprogrammierung von Vorlagen mithilfe von Fold-Ausdrücken erhalten:
Dies sollte auch beim Kompilieren effizienter sein (natürlich sind diese zur Laufzeit gleich).
PS: Lesen Sie einfach, dass Sie nur C ++ 14 haben, aber lassen Sie dies hier stehen, da ich es schön zu sehen finde, dass wir in neueren C ++ - Versionen weniger gezwungen sind, umständliches TMP durchzuführen.
Nachtrag: Weniger elegant als C ++ 17, aber C ++ 14 und ziemlich tmp-frei
quelle