有界原语

时间:2014-11-05 18:04:57

标签: java c++ operator-overloading primitive

Java或C ++中是否有类似于有界原语的东西?我想要的是一个变量,它像float或double一样,除了它具有用户可设置的最小值和最大值。

因此,例如,如果我要将这样的浮点变量设置为0到100之间的绑定,我可以尝试将其设置为任意数字,并且通常以与我相同的方式使用它原语,除了当分配给它的值大于允许的最大值时,它将假设最大值,当它小于最小值时,它将假设最小值。我希望能够对其进行基本操作,例如加法,乘法和减法 - 特别是使用我将在类似的正常变量上使用的运算符。

这些存在于某个某个库中吗?

2 个答案:

答案 0 :(得分:3)

你可以为此设计这样一个类(用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 
  }
};

您可以将其转换为模板以支持其他数据类型。

答案 1 :(得分:1)

没有这样的Buildins。此外,Java不允许运算符重载,因此您永远无法编写类似的内容:

myBoundedInt i = 13;

而是:

myBoundedInt i = new myBoundedInt(13);
//...
i.setValue(42);

据我所知,Dlang确实为类提供了内置断言,以保证在对象的整个生命周期内满足某些条件。也许你想看看这个。