有条件运算符x?a:b,它通常可以节省大量编写工作

现在我发现这样的表达

   if ( ( isMax && lower-higher <= distance) ||
        ( !isMax && lower-higher >= distance) ) { ...

其中isMax是定义要使用最大值(true)还是最小值(false)的 bool(boolean) 值,lowerhigher是边界(在这种情况下为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)) {
    // ...
}

我的意见(您没有要求):仅使用一个中间变量(或必要时使用多个变量)!

09-06 13:47