有条件运算符x?a:b
,它通常可以节省大量编写工作
现在我发现这样的表达
if ( ( isMax && lower-higher <= distance) ||
( !isMax && lower-higher >= distance) ) { ...
其中
isMax
是定义要使用最大值(true)还是最小值(false)的 bool(boolean) 值,lower
和higher
是边界(在这种情况下为int)现在我在想:是否有办法以这种方式“挑选”运算符(operator)?
我的意思是而不是以“x?a:b”方式选择操作数,而是使用其他运算符
在
bool (*op)() = isMax ? operator<=() : operator >=
上使用的类似lower-higher
的东西?或类似
lower-higher (isMax? <= : >=) distance
,那将不起作用(当然) 最佳答案
简短答案:不可以。
但接近的结果是编写具有这种效果的内联函数:
template<class T>
inline bool compare(bool isLessThan, const T& left, const T& right)
{
if (isLessThan) {
return left <= right;
}
else {
return left >= right;
}
}
// ... later ...
if (compare(isMax, lower - higher, distance)) {
// ...
}
我的意见(您没有要求):仅使用一个中间变量(或必要时使用多个变量)!