是否有可能将指向操作符的指针作为参数传递给函数的指针?

时间:2019-05-15 14:21:04

标签: c++

我正在考虑一般情况,以下只是遇到的一个简单示例,虽然易于处理但却引起了我的想法。

例如,我正在使用sort()的{​​{1}}函数。 而不是将函数定义为

<algorithm>

bool cmp (int n1, int n2)
{
    return n1 > n2;
}

在主函数中,我想知道是否可以将指针传递给运算符sort (arr, arr + N, cmp); ,就像将指针传递给函数,排序函数一样。如果是这样,我该如何实施?

2 个答案:

答案 0 :(得分:43)

您无法获得指向内置运算符的指针。但是幸运的是,标准库为所有标准运算符提供了功能对象。在您的情况下,该对象的名称为std::greater

sort (arr, arr + N, std::greater<int>{});

自C ++ 14起,您甚至可以省略参数类型,并将根据对象的使用方式推论得出:

sort (arr, arr + N, std::greater<>{});

从C ++ 17开始,空的<>也可以省略:

sort (arr, arr + N, std::greater{});

答案 1 :(得分:4)

您不能这样做,但是可以在排序内部直接使用lambda,或者如果需要将比较器传递给它,则可以将lambda本身存储在变量中

sort (arr, arr + N, [](int a, int b){ return a > b; });

auto comp = [](int a, int b){ return a > b; };
sort (arr, arr + N, comp);

或根据建议,您可以使用std::greater

sort (arr, arr + N, std::greater<>{});