template <typename Key, typename Comp> class GenericClass { // example class Comp comp; // comparator object // ... public: void memberFunction(Key p, Key q) { if (comp(p, q) > 0) { /* ... */ } // compare keys using comp } }; // ... Point2D p, q; // p and q are points GenericClass<Point2D, LexCompare> concrete; concrete.memberFunction(p, q); // compare p, q using LexCompare // ...