Есть ли способ определить «int» как «больше / меньше, чем» вместо «=»? - PullRequest
1 голос
/ 04 апреля 2019

Я играл на каком-то испытании на каком-то сайте и столкнулся с этой проблемой. у меня есть неопознанное целое число ... только я знаю, что оно больше x или \ и меньше y и так далее ... Есть ли способ определить переменную на основе так? ... Я имею в виду, что больше \ меньше целого ..

некоторые отметили, что not_null поможет, но я не мог понять, как ..

вот несколько глупых примеров:

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

поэтому я ожидаю, что код распознает, что some_unknown_number не может быть меньше 1, поскольку оно уже больше 8 ....

ps: я не хочу точного ответа ... просто скажи мне, где искать, если ты понимаешь, о чем я ...

Ответы [ 2 ]

3 голосов
/ 04 апреля 2019

Вы можете создать класс, представляющий это как

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

, который моделирует нижнюю и верхнюю границу экземпляра.Если оба присутствуют и установлены на одно и то же значение, это явно моделирует обычный int.

Затем вы строите свой оператор < & c.в соответствии с этой моделью.

1 голос
/ 04 апреля 2019

Интересный вопрос, действительно.Вы можете определить свой тип.Например:

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");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...