На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
  
> mixin'ы в С++
    Qraizer - это твой выход. Общественность в лице меня требует освещения вопроса! Не то, чтобы "есть и пить не могу", но вопрос уже не одного дня в году. Залепи, плс, научные изыскания - как можно реализовать!
      Зачем, Majestio? У нас есть полноценное множественное наследование. При желании можно примешивать и интерфейсы (абстрактные классы) тоже. Д.с. в Плюсах они уже есть. А с применением шаблонов так и вовсе примеси в пролёте по спектру возможностей.
        Т.е. ты считаешь. что для плюсов - это "лишняя" тема?
          Почему же лишняя. Не лишняя. Просто у нас они уже есть.

          Добавлено
          Вот пример с вики (убрал динамический полиморфизм за ненадобностью, у нас тут CRTP). Предположим, у нас есть класс
          ExpandedWrap disabled
            struct Complex
            {
              Complex(int re, int im): re_(re), im_(im) { }
             
              bool operator==(const Complex& cmp) const
              {
                return cmp.re_ == this->re_ && cmp.im_ == this->im_;
              }
              // ...
            private:
              int re_, im_;
            };
          Он умеет сравниваться на равенство. Предположим, у нас есть «примесь»
          ExpandedWrap disabled
            template <typename T> struct AddNoEq
            {
              bool operator!=(const T &cmp) const
              {
                return !static_cast<const T*>(this)->operator==(cmp);
              }
            };
          реализующий операцию сравнения на неравенство в предположении, что у нас есть операция на равенство. Чтобы примешать эту операцию к Complex, достаточно в его определении дописать базовый класс:
          ExpandedWrap disabled
            struct Complex: AddNoEq<Complex>
          Всё.

          Добавлено
          Понимаешь, это там, где нет множественного наследования реализаций, с примесями будет посложнее. Придётся заморачиваться интерфейсами, реализовывать агрегатами, делегировать им их функционал... Как обычно, задачи, сводимые к множественному наследованию реализаций, легко решаются ...хм, множественным наследованием реализаций. Они возникают нечасто, но когда возникают, а язык такого механизма не имеет, начинаются всякоразные творческие изыски.

          Добавлено
          Ну или да, поддерживать примеси на уровне языка. Только это ж половина решения, применение множественного наследования реализаций только лишь реализацией идиомы примесей ведь не ограничивается.
          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,0300 ]   [ 17 queries used ]   [ Generated: 26.04.24, 19:15 GMT ]