更大的算子不起作用

时间:2013-11-29 07:57:46

标签: c++ templates generics stl functor

这是代码。

#include <iostream>
#include <algorithm>
#include <functional>

using namespace std;

int main()
{
    int a = 1;
    int b=2;
    if(greater<int>(a,b))
        cout<<"YES";
    else
        cout<<"NO";
}

当我编译它时,错误消息是:错误C2661:“std :: greater&lt; _Ty&gt; :: greater”:没有带有两个参数的重载函数。这很令人困惑,它应该采取两个参数,对吗?

我使用更高的排序算法,它工作得非常好。但我不知道上述程序中的错误信息是如何产生的。

3 个答案:

答案 0 :(得分:5)

它将以这种方式工作:

int a = 1;
int b=2;
greater<int> g;
if(g(a,b))
cout<<"YES";
else
cout<<"NO";

答案 1 :(得分:3)

std::greater的比较功能是通过其operator()或函数调用运算符完成的。随你而去

greater<int>(a,b)

您正在创建一个greater<int>对象而不进行比较。该错误实际上表示没有构造函数接受两个int,因为您正在尝试创建它的对象。

首先创建一个greater<int>对象,然后使用其函数调用运算符

greater<int>()(a, b)
//          |/|----|
//          | |
//          | |- Then call greater<int>::operator() which does the comparison 
//          |- Create a temporary greater<int> object

Live example

答案 2 :(得分:1)

按以下方式编写

if(greater<int>()(a,b))

要比较值类std :: greater使用其运算符函数