Template-Spezialisierung für eine Reihe von Werten [duplizieren]

7

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?

    
Freddie Witherden 04.10.2011, 17:11
quelle

3 Antworten

14
%Vor%

In getaggt sind kann std::conditional verwenden:

%Vor%

Sie können entscheiden, welche weniger lesbar ist.

    
hansmaad 04.10.2011, 17:34
quelle
7

@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.

    
AraK 04.10.2011 17:47
quelle
1

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.

    
Mark Ransom 04.10.2011 17:23
quelle