有没有办法用'大于/小于'而不是'='来定义'int'?

问题描述 投票:1回答:2

我正在一些网站上挑战,我遇到了这个问题。我有一个未识别的整数...只有我知道它是更大的x或\和更小的y等等...是否有一种方法来定义基于这样的变量? ...我的意思是更大\小于整数..

有人注意到not_null会有所帮助,但我无法理解如何...

这是一些愚蠢的例子:

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

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

ps:我不想要确切的答案......如果你知道我的意思,请告诉我在哪里看看......

c++ int
2个回答
3
投票

您可以构建一个表示此类的类

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

它模拟实例的下限和上限。如果两者都存在并设置为相同的值,这清楚地模拟了一个普通的int

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


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");
© www.soinside.com 2019 - 2024. All rights reserved.