有边界的基本体

Bounded primitives

本文关键字:边界      更新时间:2023-10-16

在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 
  }
};

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

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

myBoundedInt i = 13;

但是:

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

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