<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=427855&amp;view=findpost&amp;p=3868732</guid>
        <pubDate>Tue, 14 Jun 2022 14:07:02 +0000</pubDate>
        <title>mixin&amp;#39;ы в С++</title>
        <link>https://forum.sources.ru/index.php?showtopic=427855&amp;view=findpost&amp;p=3868732</link>
        <description><![CDATA[Qraizer: Почему же лишняя. Не лишняя. Просто у нас они уже есть. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2022-06-14T17:23:23+03:00">14.06.22, 14:23</time></span></span><br>
Вот пример с вики (убрал динамический полиморфизм за ненадобностью, у нас тут CRTP). Предположим, у нас есть класс<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">struct Complex</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;Complex(int re, int im): re_(re), im_(im) { }</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;bool operator==(const Complex&amp; cmp) const</div><div class="code_line">&nbsp;&nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;return cmp.re_ == this-&#62;re_ &amp;&amp; cmp.im_ == this-&#62;im_;</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">&nbsp;&nbsp;// ...</div><div class="code_line">private:</div><div class="code_line">&nbsp;&nbsp;int re_, im_;</div><div class="code_line">};</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script>Он умеет сравниваться на равенство. Предположим, у нас есть «примесь»<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">template &#60;typename T&#62; struct AddNoEq</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;bool operator!=(const T &amp;cmp) const</div><div class="code_line">&nbsp;&nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;return !static_cast&#60;const T*&#62;(this)-&#62;operator==(cmp);</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">};</div></ol></div></div></div></div>реализующий операцию сравнения на неравенство в предположении, что у нас есть операция на равенство. Чтобы примешать эту операцию к Complex, достаточно в его определении дописать базовый класс:<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">struct Complex: AddNoEq&#60;Complex&#62;</div></ol></div></div></div></div>Всё. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2022-06-14T14:29:56+00:00">14.06.22, 14:29</time></span></span><br>
Понимаешь, это там, где нет множественного наследования реализаций, с примесями будет посложнее. Придётся заморачиваться интерфейсами, реализовывать агрегатами, делегировать им их функционал... Как обычно, задачи, сводимые к множественному наследованию реализаций, легко решаются ...хм, множественным наследованием реализаций. Они возникают нечасто, но когда возникают, а язык такого механизма не имеет, начинаются всякоразные творческие изыски. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2022-06-14T14:31:18+00:00">14.06.22, 14:31</time></span></span><br>
Ну или да, поддерживать примеси на уровне языка. Только это ж половина решения, применение множественного наследования реализаций только лишь реализацией идиомы примесей ведь не ограничивается.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=427855&amp;view=findpost&amp;p=3868293</guid>
        <pubDate>Fri, 10 Jun 2022 15:10:35 +0000</pubDate>
        <title>mixin&amp;#39;ы в С++</title>
        <link>https://forum.sources.ru/index.php?showtopic=427855&amp;view=findpost&amp;p=3868293</link>
        <description><![CDATA[Majestio: Т.е. ты считаешь. что для плюсов - это &quot;лишняя&quot; тема?]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=427855&amp;view=findpost&amp;p=3868285</guid>
        <pubDate>Fri, 10 Jun 2022 13:52:20 +0000</pubDate>
        <title>mixin&amp;#39;ы в С++</title>
        <link>https://forum.sources.ru/index.php?showtopic=427855&amp;view=findpost&amp;p=3868285</link>
        <description><![CDATA[Qraizer: Зачем, <strong class='tag-b'>Majestio</strong>? У нас есть полноценное множественное наследование. При желании можно примешивать и интерфейсы (абстрактные классы) тоже. Д.с. в Плюсах они уже есть. А с применением шаблонов так и вовсе примеси в пролёте по спектру возможностей.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=427855&amp;view=findpost&amp;p=3868202</guid>
        <pubDate>Fri, 10 Jun 2022 05:27:45 +0000</pubDate>
        <title>mixin&amp;#39;ы в С++</title>
        <link>https://forum.sources.ru/index.php?showtopic=427855&amp;view=findpost&amp;p=3868202</link>
        <description><![CDATA[Majestio: <strong class='tag-b'>Qraizer</strong> - это твой выход. Общественность в лице меня требует освещения вопроса&#33; Не то, чтобы &quot;есть и пить не могу&quot;, но вопрос уже не одного дня в году. Залепи, плс, научные изыскания - как можно реализовать&#33;]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      </channel>
      </rss>
	