La limitation de la gamme de types de valeur en C++

Supposons que j'ai un LimitedValue classe qui détient une valeur, et est paramétrée sur int types 'min' et 'max'. Vous souhaitez utiliser comme un contenant pour les valeurs qui ne peuvent être que dans une certaine plage. Vous pouvez l'utiliser tel:

LimitedValue< float, 0, 360 > someAngle( 45.0 );
someTrigFunction( someAngle );

de sorte que " someTrigFunction sait qu'il est garanti pour être fourni à une entrée valide (Le constructeur lève une exception si le paramètre n'est pas valide).

La copie de la construction et de l'affectation sont limitées exactement égale types. J'aimerais être capable de faire:

LimitedValue< float, 0, 90 > smallAngle( 45.0 );
LimitedValue< float, 0, 360 > anyAngle( smallAngle );

et le fonctionnement vérifié à la compilation, donc l'exemple suivant donne une erreur:

LimitedValue< float, -90, 0 > negativeAngle( -45.0 );
LimitedValue< float, 0, 360 > postiveAngle( negativeAngle ); //ERROR!

Est-ce possible? Est-il un moyen pratique de faire cela, ou des exemples qui approche ce?

InformationsquelleAutor user23434 | 2008-09-29