Продублировать интерфейс класса.
От: Vuoro  
Дата: 24.02.13 20:00
Оценка:
Вот пример класса с двойным интерфейсом:
class Pig {
 public: // Интерфейс Eat() для поедания известных плодов
  void Eat(Apple a);
  void Eat(Banana b);
  void Eat(Coco c);
  
 public: // Интерфейс EatAnything() для поедания ВСЕГО
  // Дублируем ннтерфейс Eat(), так как известные плоды мы умеем есть
  void EatAnything(Apple a)   { Eat(a); }
  void EatAnything(Banana b)  { Eat(b); }
  void EatAnything(Coco c)   { Eat(c); }

  // Неизвестные плоды ... 
  // Например, так
  void EatAnything(...)   { }
  
  // или так
  template<typename T>
  void EatAnything(T)   { }
};

void main()
{
  Apple a;
  Coco c;
  Tomato t;
  
  Pig pig;
  
  pig.Eat(a);
  pig.Eat(c);
  pig.Eat(t); // Compile error! Функции Eat(Tomato) в Pig нет

  pig.EatAnything(a);
  pig.EatAnything(c);
  pig.EatAnything(t); // А здесь OK.
}


Вопрос. Как сделать интерфейс EatAnything() попроще, в две-три строчки, чтобы его не приходилось обновлять каждый раз при добавлении новых видов плодов?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.