【发布时间】:2016-01-03 10:47:53
【问题描述】:
我正在测试一个数字是否介于两个值之间。我让用户选择逻辑比较是否应在任一(或两者)限制上包含equal to。
他们通过定义一个 struct 来设置它,其中包含两个边缘值以及要使用的比较运算符:
typedef struct {
double low;
double high;
bool low_equal; //false if a greater than operator (`>`) should be used, true if a greater-than-or-equal-to (`>=`) operator should be used
bool high_equal; //Same as low_equal but for a less-than operator
} Edges;
创建了一个Edges 数组(下面称为bins),对于每个输入value,我检查它是否位于bin 边缘内。
但是,为了使用所需的一对比较运算符,我最终得到了这个可怕的条件块:
if (bins[j].low_equal && bins[j].high_equal)
{
if (value >= bins[j].low && value <= bins[j].high)
{
break;
}
}
else if (bins[j].low_equal)
{
if (value >= bins[j].low && value < bins[j].high)
{
data[i] = bins[j].value;
break;
}
}
else if (bins[j].high_equal)
{
if (datum > bins[j].low && datum <= bins[j].high)
{
break;
}
}
else
{
if (value > bins[j].low && value < bins[j].high)
{
break;
}
}
有没有更好的方法来做到这一点?我可以以某种方式设置要使用的运算符然后调用它们吗?
【问题讨论】:
-
您可以使用
std::function和运算符功能等价物,例如std::less、std::less_equal等 -
@jramm 如果该值与数组中的多个元素匹配怎么办?
标签: c++ logical-operators comparison-operators