Re: virtual operator==
От: byleas  
Дата: 13.11.09 19:40
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Делаю так: объявил виртуальный оператор == в базовом классе как чистый.

А>Кроме того непонятно совершенно как решать такую задачу на проверку совместимости в шаблоне: мы знаем что типы могут быть указателями или переменные.

Если нужно именно сравнение:
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); }
};
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.