<?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=455717&amp;view=findpost&amp;p=3916639</guid>
        <pubDate>Sat, 25 Jan 2025 18:53:11 +0000</pubDate>
        <title>Неведомая велосипедная конструкция - помогите распознать&amp;#33;</title>
        <link>https://forum.sources.ru/index.php?showtopic=455717&amp;view=findpost&amp;p=3916639</link>
        <description><![CDATA[sharky72: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=455717&view=findpost&p=3916267'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Majestio &#064; <time class="tag-quote__quoted-time" datetime="2025-01-17T20:23:04+03:00">17.01.25, 17:23</time></span><div class='quote '></div></div><br>
В жабе это часто встречается. Зачастую называю билдером<br>
Ну и в плюсах легко реализуется через возврат сссылки на объект с нужными методами в каждом вызове метода. Ближайшая аналогия возврат *this в операторах]]></description>
        <author>sharky72</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=455717&amp;view=findpost&amp;p=3916275</guid>
        <pubDate>Sun, 19 Jan 2025 06:39:45 +0000</pubDate>
        <title>Неведомая велосипедная конструкция - помогите распознать&amp;#33;</title>
        <link>https://forum.sources.ru/index.php?showtopic=455717&amp;view=findpost&amp;p=3916275</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=455717&view=findpost&p=3916271'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2025-01-18T13:34:52+00:00">18.01.25, 13:34</time></span><div class='quote '>ИМХО ты слишком увлекаешься паттернами.</div></div><br>
Тебе это кажется :) Да, эта тема для меня интересна. Но я давно к таким вещам отношусь без фанатизма. Подход простой - не натягивать сову на глобус. Там, где это явно уместно, там использовать.  В остальных случаях надо оценивать плюсы/минусы от применений. Да, я тоже где-то читал, более того - видел анимированный гифчег, как демонстрировали неуместное усложнение кода путем насильственного применения паттернов. Что-то типа фабрики Хэлоу Ворлдов. Поэтому я строго за целесообразность.]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=455717&amp;view=findpost&amp;p=3916271</guid>
        <pubDate>Sat, 18 Jan 2025 13:34:52 +0000</pubDate>
        <title>Неведомая велосипедная конструкция - помогите распознать&amp;#33;</title>
        <link>https://forum.sources.ru/index.php?showtopic=455717&amp;view=findpost&amp;p=3916271</link>
        <description><![CDATA[Qraizer: Я такую цепочку и на С построю запросто:<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">const char head[] = &quot;Read error of \&quot;&quot;;</div><div class="code_line">const char mid [] = &quot;\&quot;. Error code is &quot;;</div><div class="code_line">const char tail[] = &quot;.\n&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;char err [sizeof(errno)*2*6/5+1]; &nbsp; &nbsp; &nbsp; /* (2 hex per byte) * (log10(16)≈12/10) + NUL */</div><div class="code_line">&nbsp;</div><div class="code_line">/* ... */</div><div class="code_line">&nbsp;</div><div class="code_line">char *msg = strcat(</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;strcat(</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;strcat(</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;strcat( &nbsp; /* NULs: -1 &nbsp; + &nbsp; &nbsp; &nbsp; &nbsp;-1 &nbsp; + &nbsp; &nbsp; &nbsp; &nbsp; -1 &nbsp; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0 &nbsp; &nbsp; &nbsp;+ &nbsp; &nbsp; &nbsp; -1+1 &#62;--+ */</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;strcpy( /* &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;! */</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;malloc(sizeof(head) + sizeof(mid) + sizeof(tail) + strlen(fileName) + sizeof(err) - 3)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;, head)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;, fileName)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;, mid)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;, (_itoa(errno, err, 10), err))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;, tail);</div><div class="code_line">fputs(msg, stderr);</div><div class="code_line">free(msg);</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script> <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="2025-01-18T13:36:22+00:00">18.01.25, 13:36</time></span></span><br>
А уж operator&lt;&lt; в потоки вывода так вообще все юзали <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="2025-01-18T14:02:54+00:00">18.01.25, 14:02</time></span></span><br>
P.S. «Строитель» напоминает недавний разговор об опциональных именованных параметрах в Холиварах. ИМХО ты слишком увлекаешься паттернами. Где-то в нулевых как-то читал, что они скорее вредят, чем помогают, т.к. по факту стандартизируют лишь архитектурные решения, но не реализации. Это, мол, приводит к тому, что паттерн очень сложно распознать глазами по коду, а когда можно, крайне тяжело их ревьюжить на предмет багов реализации. А самое главное то, что общие архитектурные решения практически никогда не подходят в конкретным случаях, и их приходится адаптировать, что фактически стандартизацию сводит на нет. В итоге на спринтах дискуссии сваливаются в обсуждение паттернов и споров вокруг их корректности вместо обсуждения реальных задач и проблем.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=455717&amp;view=findpost&amp;p=3916269</guid>
        <pubDate>Sat, 18 Jan 2025 01:43:06 +0000</pubDate>
        <title>Неведомая велосипедная конструкция - помогите распознать&amp;#33;</title>
        <link>https://forum.sources.ru/index.php?showtopic=455717&amp;view=findpost&amp;p=3916269</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=455717&view=findpost&p=3916268'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2025-01-17T19:31:27+00:00">17.01.25, 19:31</time></span><div class='quote '>Я бы стал это называть паттерном</div></div><br>
Ну да, паттерн ... но ты отжег :lool: Что-то вспомнился анекдот:<br>
<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Сидят грузин и армянин. Пьянствуют чячу ...<br>
Грузин: Послушай, генацвале, грузины лучше чем армяне&#33;<br>
Армянин: Эй, а чем лучше?<br>
Грузин: Как чем? Чем армяне&#33;</div></div><br>
Я &quot;распознал&quot; эту шляпу в плане паттернов проектирования GoF - она называется &quot;<a class='tag-url' href='https://majestio.info/articles/design-patterns-cheat-sheet/chain-of-responsibility.html' target='_blank'>Цепочка обязанностей</a>&quot;. По ссылке немного не то, хотя и по теме. А вот много по теме - синтетический пример:<br>
<br>
<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">#include &#60;iostream&#62;</div><div class="code_line">#include &#60;string&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">class SomeClass {</div><div class="code_line">&nbsp;&nbsp; &nbsp;int counter = 0;</div><div class="code_line">public:</div><div class="code_line">&nbsp;&nbsp; &nbsp;SomeClass&amp; method1() {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;counter++;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;std::cout &#60;&#60; &quot;Method 1 called&quot; &#60;&#60; &quot;, counter: &quot; &#60;&#60; counter &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return *this;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;SomeClass&amp; method2() {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;counter++;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;std::cout &#60;&#60; &quot;Method 2 called&quot; &#60;&#60; &quot;, counter: &quot; &#60;&#60; counter &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return *this;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;SomeClass&amp; method3() {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;counter++;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;std::cout &#60;&#60; &quot;Method 3 called&quot; &#60;&#60; &quot;, counter: &quot; &#60;&#60; counter &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return *this;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;void methodFinal() {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;counter = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;std::cout &#60;&#60; &quot;Final method called&quot; &#60;&#60; &quot;, counter: &quot; &#60;&#60; counter &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">int main() {</div><div class="code_line">&nbsp;&nbsp; &nbsp;SomeClass some;</div><div class="code_line">&nbsp;&nbsp; &nbsp;some.method1().method2().method3().methodFinal();</div><div class="code_line">&nbsp;&nbsp; &nbsp;return 0;</div><div class="code_line">}</div></ol></div></div></div></div><br>
Очень похоже на паттерн &quot;<a class='tag-url' href='https://majestio.info/articles/design-patterns-cheat-sheet/builder.html' target='_blank'>Строитель</a>&quot;, но всё же это не он.]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=455717&amp;view=findpost&amp;p=3916268</guid>
        <pubDate>Fri, 17 Jan 2025 19:31:27 +0000</pubDate>
        <title>Неведомая велосипедная конструкция - помогите распознать&amp;#33;</title>
        <link>https://forum.sources.ru/index.php?showtopic=455717&amp;view=findpost&amp;p=3916268</link>
        <description><![CDATA[Qraizer: Ну... каждый метод возвращает ссылку на что-то, что имеет очередной соответствующий публичный метод. Я бы стал это называть паттерном, сам нередко так пишу, когда возможно.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=455717&amp;view=findpost&amp;p=3916267</guid>
        <pubDate>Fri, 17 Jan 2025 17:23:04 +0000</pubDate>
        <title>Неведомая велосипедная конструкция - помогите распознать&amp;#33;</title>
        <link>https://forum.sources.ru/index.php?showtopic=455717&amp;view=findpost&amp;p=3916267</link>
        <description><![CDATA[Majestio: Всем прива&#33;<br>
<br>
Я уже и не помню, где и когда, и в каком контексте видел конструкцию типа:<br>
<br>
<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">int main() {</div><div class="code_line">&nbsp;&nbsp;SomeClass some;</div><div class="code_line">&nbsp;&nbsp;some.</div><div class="code_line">&nbsp;&nbsp; method01().</div><div class="code_line">&nbsp;&nbsp; method22().</div><div class="code_line">&nbsp;&nbsp; method32().</div><div class="code_line">&nbsp;&nbsp; methodFinal();</div><div class="code_line">}</div></ol></div></div></div></div><br>
<br>
Понятное дело - это &quot;псевдокод-велосипед&quot;. Но я это не от балды привёл, где-то подобное видел&#33;<br>
Прошу &quot;распознать&quot; =) Что это? Какой <a class='tag-url' href='https://majestio.info/articles/solid-on-gof-design-patterns.html' target='_blank'>паттерн из GoF</a> это реализует (если оно так), и прошу привести синтетический пример на С++ где такое можно использовать&#33;]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      </channel>
      </rss>
	