Ich möchte eine Template-Struktur foo
schreiben, so dass foo<N>::value_type
die nächstgrößere ganze Zahl (aufgerundet) zu N
ist. Zum Beispiel foo<32>::value_type => uint32_t
, foo<33>::value_type => uint64_t
und foo<72>::value_type => uint64_t
.
Um dies zu tun, brauche ich eine elegante Möglichkeit, partielle Spezialisierungen von foo
für einen Bereich von Werten bereitzustellen, z. B. 1 <= N <= 8
, um uint8_t zurückzugeben und so weiter und so weiter. Gibt es ein Mittel, dies zu erreichen, ohne alles von 0 bis 64 zu spezialisieren?
@hansmaad Antwort ist eine nette Antwort, aber ich würde lieber verwenden (rate was ?!) Boost :
%Vor%Der kleinste integrierte vorzeichenlose Integraltyp mit mindestens N Bits. Der Parameter sollte eine positive Zahl sein. Ein Fehler bei der Kompilierung Ergebnisse, wenn der Parameter größer ist als die Anzahl der Bits in der größter Integer-Typ.
Template-Parameter müssen konkret sein, daher glaube ich nicht, dass es eine Möglichkeit gibt, die Spezialisierung für jeden erforderlichen Wert zu vermeiden.
Tags und Links c++ templates template-meta-programming