2016-07-25 77 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);