Здравствуйте, Аноним, Вы писали:
А>Делаю так: объявил виртуальный оператор == в базовом классе как чистый.
А>Кроме того непонятно совершенно как решать такую задачу на проверку совместимости в шаблоне: мы знаем что типы могут быть указателями или переменные.
Если нужно именно сравнение:
struct base_element
{
virtual ~base_element(){}
virtual bool equal_to(const base_element* r) const throw() = 0;
};
#include <functional>
template<>
struct std::equal_to<base_element*>
{
bool operator()(const base_element* x, const base_element* y) const { return x && y ? x->equal_to(y) : x == y; } // последняя проверка на то, что оба элемента равны 0.
};
template<class T, class Compare = std::equal_to<T> >
class myset
{
Compare cmp_;
// использование компаратора:
bool is_equal(const T& x, const T& y) const throw() { return cmp_(x,y); }
};