2016-07-25 54 views
1

我正在尝试使用模板参数std::lessstd::greater或。这是后续到this question,因为答案没有提供完整的示例,我无法成功使用模板比较器。使用模板比较器的完整示例

#include <functional> 
#include <algorithm> 

template <typename C> 
class Test 
{ 
    int compare(int l, int n, int x, int y) 
    { 
     public: 
     bool z = C(x, y); 
     if(l < n && z) 
     { 
      return 1; 
     } 
     else 
     { 
      return 2; 
     } 
    } 
}; 

int main() { 
    Test<std::less<int>> foo; 
    Test<std::greater<int>> bar; 
    foo.compare(1, 2, 3, 4); 
    bar.compare(1, 2, 3, 4); 
} 
+1

变化'布尔Z = C(X,Y);'到'布尔Z = C {}(X, Y);'。 – ildjarn

+1

“我无法工作”是什么意思? – user4759923

回答

1

注意C(即std::less<int>std::greater<int>)是类型名称,而不是实例。 bool z = C(x, y);C==std::less<int>时不起作用,因为C(x, y)将被解释为std::less<int>的构造,这将失败,因为std::less不具有这样的构造函数,并且std::less不能转换为bool

你可能意味着调用operator()上的C的情况下,你可以将其更改为

bool z = C()(x, y);