LINUX.ORG.RU

История изменений

Исправление alysnix, (текущая версия) :

А в Си++ общих интерфейсов нет ни у строк, ни у массивов, ни у словарей.

потому что с++ делает бизнес на эффективности. а такие вот интерфейсы утяжеляют класс, а реальная применимость всего этого довольно сомнительна.

потому они делают это через теплейты, или пользовательские интерфейсы.

типа пусть нам нужны две функции ff() и fff() для неких неродственных классов a,b,c.

тогда мы рисуем интерфейс

class face0 {
public:
  void ff() = 0;
  void fff() = 0;
}

и реализуем его для a,b,c.

/// for class <a>
class face_a: public face0 {
  a& _ref; ///reference to <a> object 
public:
  face_a(a& fref): _ref(fref) {}
  void ff() override {.... };
  void fff() override {.....};
}

/// for class <b>
...

и тогда наша функция будет иметь заголовок

xxx(face0& fobj)

принимая ссылку на интерфейс face0. то есть мы породнили неродственные классы(не меняя их) через свой интерфейс и обошли их неродственность.

Исходная версия alysnix, :

А в Си++ общих интерфейсов нет ни у строк, ни у массивов, ни у словарей.

потому что с++ делает бизнес на эффективности. а такие вот интерфейсы утяжеляют класс, а реальная применимость всего этого довольно сомнительна.

потому они делают это через теплейты, или пользовательские интерфейсы.

типа пусть нам нужны две функции ff() и fff() для неких неродственных классов a,b,c.

тогда мы рисуем интерфейс

class face0 {
public:
  void ff() = 0;
  void fff() = 0;
}

и реализуем его для a,b,c.

class face_a: public face0 {
  a& _ref; ///reference to <a> object 
public:
  face_a(a& fref): _ref(fref) {}
  void ff() override {.... };
  void fff() override {.....};
}

и так далее

и тогда наша функция будет иметь заголовок

xxx(face0& fobj)

принимая ссылку на интерфейс face0. то есть мы породнили неродственные классы(не меняя их) через свой интерфейс и обошли их неродственность.