2013-10-06 3 views

ответ

0

Это может помочь:

template <class T, class Comparator = std::less<T>> 
class MyClass 
{ 
    bool compare(const T& lhs, const T& rhs) const { return Comparator()(lhs, rhs); } 
    // stuff 
}; 

class A 
{ 
public: 
    bool operator < (const A& rhs) const; 
}; 

MyClass<A> myClass; 
0
template <class T, class Comparator = std::less<T>> 
class MyClass 
{ 
    //... 
} 

В функции члена, что-то вроде: -

void MyClass::Myfun(X x, Comparator mycomp = Comparator()) 
{ 

    if (mycomp(data1,data2)) 
    //... 

} 
+0

Нет, я хочу создать класс, который принимает ** this ** в качестве параметра шаблона – user2798694

+0

@ user2798694 см. Обновленный ответ – P0W

0

В STL контейнеры фактически хранить экземпляр компаратора, так что вы хотите ближе к настоящему времени:

template <class T, class Comparator = std::less<T>> 
class MyClass : private Comparator 
{ 
public: 
    MyClass() {} 
    MyClass(const Comparator& compare) : Comparator(compare) {} 

    bool compare(const T& lhs, const T& rhs) const 
    { 
     return static_cast<Comparator>(*this)(lhs, rhs); 
    } 

    // stuff 
}; 

class A 
{ 
public: 
    bool operator < (const A& rhs) const; 
}; 

MyClass<A> myClass; 

Неправильно e, что вы должны использовать частное наследование, чтобы позволить пустой оптимизации базы данных удалять служебные данные в случае, если Comparator не содержит никакого состояния.

Смежные вопросы