我在某个网站上遇到挑战,我遇到了这个问题。 我有一个不确定的整数...只有我知道x或\较大,而y较小,依此类推... 有没有办法基于这样定义变量? ... 我的意思是大于\小于整数..
有人指出not_null会有所帮助,但我不明白该如何做。
这是一个愚蠢的例子:
int some_unknown_number > 8;
if [some_unknown_number<=1]
{cout << "wrong" << endl;}
所以我希望代码能够识别some_unknown_number不能小于1,因为它已经大于8。...
ps:我不想要确切的答案……只要您知道我的意思就告诉我要去哪里...。
答案 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");