Хитрый предикат
От: Аноним  
Дата: 23.11.05 09:50
Оценка:
Добрый день, уважаемые Гуру!

Возник следующий вопрос по использованию stl. Возможно ли написание
собственного (шаблонного) предиката так, чтобы была возможность передачи в него метода
из класса сравниваемых объектов.

#include <set>

//////////////////////////////////////////////
class A {
    public:
        A (int i) : m_i ( i ) { };
        int  getInt () const { return m_i; };
        void setInt (int i)  { m_i = i; };

    protected:
        int m_i;
};

//////////////////////////////////////////////
class B {
    public:
        B (double d) : m_d ( d ) { };
        double  getDouble () const { return m_d; };
        void setDouble (double d)  { m_d = d; };

    protected:
        double m_d;
};


//////////////////////////////////////////////
template <class T> class my_predicate {           /// <- хотелось бы использовать этот предикат и для A и для B
    public:
        bool operator () ( const T & a, const T & b ) {
            return a.getInt() < b.getInt() ;      /// <- каким образом параметризовать вызов метода ?          
        };
};

//////////////////////////////////////////////
int main () {
    std::set < A, my_predicate <A> > a_set;
    a_set.insert ( A(1) );

    std::set < B, my_predicate <B> > b_set;
    b_set.insert ( B(1.1) );
    return 0;
}



Заранее благодарен.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.