Есть ли что-то вроде ограниченных примитивов в Java или C ++? То, что я хочу, — это переменная, которая действует как плавающая или двойная, за исключением того, что она имеет устанавливаемый пользователем минимум и максимум.
Так, например, если бы я должен был установить такую переменную с плавающей запятой, чтобы она была ограничена от 0 до 100, я мог бы попытаться установить для нее любое число и, как правило, использовать его так же, как примитив, за исключением что когда присвоенное ему значение будет больше допустимого максимума, оно будет принимать максимум, а когда оно будет меньше минимума, оно будет принимать минимум. Я хочу иметь возможность выполнять базовые операции над ним, такие как сложение, умножение и вычитание, особенно с использованием операторов, которые я использовал бы для аналогичных нормальных переменных.
Они существуют где-нибудь в библиотеке?
Ну, вы можете разработать такой класс (в C ++) для этого. Базовый дизайн будет выглядеть так:
class Bound
{
private:
const int min = 10;
const int max = 100;
int var;
public:
Bound( int x )
{
if ( x > max )
var = max;
else if ( x < min )
var = min;
else
var = x;
}
Bound& operator == ( int x )
{
// On same line as constructor
}
};
Вы можете преобразовать его в шаблон для поддержки других типов данных.
Там нет таких Buildins. Кроме того, Java не допускает перегрузки операторов, поэтому вы никогда не сможете написать что-то вроде:
myBoundedInt i = 13;
Скорее:
myBoundedInt i = new myBoundedInt(13);
//...
i.setValue(42);
Насколько я знаю, Dlang действительно имеет встроенные утверждения для классов, чтобы гарантировать выполнение определенных условий в течение всего срока службы объекта. Может быть, вы хотите посмотреть на это.