Добрый день, уважаемые Гуру!
Возник следующий вопрос по использованию 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;
}
Заранее благодарен.