Ograniczenie zakresu typów wartości w C ++

Załóżmy, że mam klasę LimitedValue, która przechowuje wartość i jest parametryzowana na typach int „min” i „max”. Użyłbyś go jako kontenera do przechowywania wartości, które mogą być tylko w pewnym zakresie. Możesz użyć tego:

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

tak, że „someTrigFunction” wie, że zagwarantowane jest prawidłowe wejście (konstruktor rzuciłby wyjątek, jeśli parametr byłby nieprawidłowy).

Kopiowanie i przypisywanie są jednak ograniczone do dokładnie równych typów. Chciałbym móc:

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

i sprawdzenie tej operacji w czasie kompilacji, więc ten następny przykład zawiera błąd:

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

czy to możliwe? Czy jest jakiś praktyczny sposób na zrobienie tego, lub jakieś przykłady, które się do tego odnoszą?

questionAnswers(9)

yourAnswerToTheQuestion