2016-07-25 2 views
1

Я пытаюсь создать класс шаблона с параметром шаблона std::less, std::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

Изменение 'BOOL г = С (х, у),' в 'BOOL г = С {} (х, у); '. – 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); 
Смежные вопросы