我正在一些网站上挑战,我遇到了这个问题。我有一个未识别的整数...只有我知道它是更大的x或\和更小的y等等...是否有一种方法来定义基于这样的变量? ...我的意思是更大\小于整数..
有人注意到not_null会有所帮助,但我无法理解如何...
这是一些愚蠢的例子:
int some_unknown_number > 8;
if [some_unknown_number<=1]
{cout << "wrong" << endl;}
所以我希望代码能够识别some_unknown_number不能小于1,因为它已经大于8 ....
ps:我不想要确切的答案......如果你知道我的意思,请告诉我在哪里看看......
您可以构建一个表示此类的类
struct bounded
{
std::optional<int> m_lower;
std::optional<int> m_higher;
};
它模拟实例的下限和上限。如果两者都存在并设置为相同的值,这清楚地模拟了一个普通的int
。
然后你构建你的<
运算符&c。按照这个模型。
确实有趣的问题。您可以定义类型。例如:
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");