是否可以通过“大于/小于”而不是“ =”来定义“ int”?

时间:2019-04-04 11:22:05

标签: c++ int

我在某个网站上遇到挑战,我遇到了这个问题。 我有一个不确定的整数...只有我知道x或\较大,而y较小,依此类推... 有没有办法基于这样定义变量? ... 我的意思是大于\小于整数..

有人指出not_null会有所帮助,但我不明白该如何做。

这是一个愚蠢的例子:

int some_unknown_number > 8;
if [some_unknown_number<=1] 
    {cout << "wrong" << endl;}

所以我希望代码能够识别some_unknown_number不能小于1,因为它已经大于8。...

ps:我不想要确切的答案……只要您知道我的意思就告诉我要去哪里...。

2 个答案:

答案 0 :(得分:3)

您可以构建一个将其表示为的类

struct bounded
{
    std::optional<int> m_lower;
    std::optional<int> m_higher;
};

用于模拟实例的上下限。如果两者都存在并且设置为相同的值,则显然可以为普通的int建模。

然后,您构建<运算符&c。按照这个模型。

答案 1 :(得分:1)

确实是一个有趣的问题。您可以定义您的类型。例如:

template<int Min, int Max>
struct Int
{
  static_assert(Max > Min, "Max should be greater than Min");

  bool operator<(int val) const
  {
    return val > Max;
  }

  bool operator>(int val) const
  {
    return Min > val;
  }
};

如果需要,您可以添加更多运算符来定义必要的语义,并像这样使用它:

// Int<19, 1> wrongInt; <--- compile time error.

Int<1, 3> myInt;
if (myInt > 0)
  printf("Greater than 0\n");

if (myInt < 5)
  printf("Less than 5\n");