<?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=202763&amp;view=findpost&amp;p=3939350</guid>
        <pubDate>Wed, 09 Sep 2026 20:21:06 +0000</pubDate>
        <title>Определение конкретного типа методом научного тыка</title>
        <link>https://forum.sources.ru/index.php?showtopic=202763&amp;view=findpost&amp;p=3939350</link>
        <description><![CDATA[Qraizer: Я подозреваю, что RTTI у него отключено не просто так. Так бывает, в высококритичном коде например. Но в таком случае следовало в иерархию внедрить свой интерфейс изначально. Нынче же либо костылить, либо рефакторить]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=202763&amp;view=findpost&amp;p=3939349</guid>
        <pubDate>Wed, 09 Sep 2026 16:07:28 +0000</pubDate>
        <title>Определение конкретного типа методом научного тыка</title>
        <link>https://forum.sources.ru/index.php?showtopic=202763&amp;view=findpost&amp;p=3939349</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=202763&view=findpost&p=3939344'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2026-09-08T19:26:23+00:00">08.09.26, 19:26</time></span><div class='quote '>Он отключил фичу, которая наура решает его задачу и спрашивает, как теперь с этим жить.</div></div><br>
Да, это наверное клиника. Ну или попытка изобрести велосипед с квадратными колёсами.<br>
<br>
Да, <span class="tag-color tag-color-named" data-value="red" style="color: red">жениться</span> с указателями можно, особенно если их использование не задекларировано Стандартом - можно. Но, до поры до времени. Пока не прилетит &quot;акей&quot; от очередного канпилятора&#33;]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=202763&amp;view=findpost&amp;p=3939345</guid>
        <pubDate>Wed, 09 Sep 2026 05:58:15 +0000</pubDate>
        <title>Определение конкретного типа методом научного тыка</title>
        <link>https://forum.sources.ru/index.php?showtopic=202763&amp;view=findpost&amp;p=3939345</link>
        <description><![CDATA[Majestio: :lol:]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=202763&amp;view=findpost&amp;p=3939344</guid>
        <pubDate>Tue, 08 Sep 2026 19:26:23 +0000</pubDate>
        <title>Определение конкретного типа методом научного тыка</title>
        <link>https://forum.sources.ru/index.php?showtopic=202763&amp;view=findpost&amp;p=3939344</link>
        <description><![CDATA[Qraizer: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=202763&view=findpost&p=3939343'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Majestio &#064; <time class="tag-quote__quoted-time" datetime="2026-09-08T18:11:15+00:00">08.09.26, 18:11</time></span><div class='quote '>Возможно он имел ввиду нечто:<br>
...</div></div>Неважно, чего он хочет. Он отключил фичу, которая наура решает его задачу и спрашивает, как теперь с этим жить. :-?]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=202763&amp;view=findpost&amp;p=3939343</guid>
        <pubDate>Tue, 08 Sep 2026 18:11:15 +0000</pubDate>
        <title>Определение конкретного типа методом научного тыка</title>
        <link>https://forum.sources.ru/index.php?showtopic=202763&amp;view=findpost&amp;p=3939343</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=202763&view=findpost&p=3939342'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2026-09-08T17:14:36+00:00">08.09.26, 17:14</time></span><div class='quote '>Ничего не смущает?</div></div><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">class Base {</div><div class="code_line">public:</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::string type_name() const { return &quot;Base&quot;; }</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">class Derived : public Base {</div><div class="code_line">public:</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::string type_name() const { return &quot;Derived&quot;; } &nbsp;// скрывает Base::type_name</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">Derived d;</div><div class="code_line">d.type_name(); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// &quot;Derived&quot;</div><div class="code_line">&nbsp;</div><div class="code_line">Base&amp; b = d;</div><div class="code_line">b.type_name(); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// &quot;Base&quot;</div><div class="code_line">&nbsp;</div><div class="code_line">Base* p = &d;</div><div class="code_line">p-&#62;type_name(); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // &quot;Base&quot;</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><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">class Shape {</div><div class="code_line">public:</div><div class="code_line">&nbsp;&nbsp; &nbsp;virtual ~Shape() = default;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::string type_name() const { // туточки невиртуальный фасад</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return type_name_impl(); &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">private:</div><div class="code_line">&nbsp;&nbsp; &nbsp;virtual std::string_view type_name_impl() const {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return &quot;Shape&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">class Circle : public Shape {</div><div class="code_line">private:</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::string_view type_name_impl() const override {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return &quot;Circle&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">class Square : public Shape {</div><div class="code_line">private:</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::string_view type_name_impl() const override {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return &quot;Square&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">};</div></ol></div></div></div></div><br>
Ну я так понял его вопрос  :-? Хотя тут хрен уточнишь - чел на форуме не был с 2008 года.]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=202763&amp;view=findpost&amp;p=3939342</guid>
        <pubDate>Tue, 08 Sep 2026 17:14:36 +0000</pubDate>
        <title>Определение конкретного типа методом научного тыка</title>
        <link>https://forum.sources.ru/index.php?showtopic=202763&amp;view=findpost&amp;p=3939342</link>
        <description><![CDATA[Qraizer: Народ. Давайте я перефразирую вопрос из первого поста:<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Как мне получить динамический тип объекта, не используя динамический тип объекта?</div></div><br>
Ничего не смущает?]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=202763&amp;view=findpost&amp;p=3939340</guid>
        <pubDate>Mon, 07 Sep 2026 17:06:29 +0000</pubDate>
        <title>Определение конкретного типа методом научного тыка</title>
        <link>https://forum.sources.ru/index.php?showtopic=202763&amp;view=findpost&amp;p=3939340</link>
        <description><![CDATA[ЫукпШ: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=202763&view=findpost&p=3939338'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Majestio &#064; <time class="tag-quote__quoted-time" datetime="2026-09-05T13:49:14+00:00">05.09.26, 13:49</time></span><div class='quote '>Эти ваши &quot;уау-фишки&quot; тоже заработают? :rolleyes:</div></div><br>
Вообще сама идея очень плохая.<br>
Самое простое и надёжное это задать для<br>
каждого типа уникальный идентификатор. Целочисленный.<br>
<br>
Если использовать указатель на процедуру, то определить тип невозможно.<br>
Можно только обнаружить разницу между типами объектов.<br>
А теперь представим себе крутой компилятор с удивительно продвинутой<br>
оптимизацией. Допустим, он обнаружит по-байтное совпадение процедур<br>
 объектов разных типов и будет использовать одну процедуру на всех.<br>
<br>
Теперь про указатели.<br>
Вычислить указатель на процедуру класса можно.<br>
Для этого не обязательно использовать:<br>
1. Процедуру f ()<br>
2. Указатель на начало процедуры (любой)<br>
<br>
Как то раз я написал функцию, которая получает адрес возврата.<br>
Она не сложная.<br>
Вызываем её из процедуры типа getAddr() и получаем адрес<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">#ifdef _M_IX86</div><div class="code_line">const size_t RET_ADDR_STACK_OFFSET = 2;</div><div class="code_line">#endif</div><div class="code_line">#ifdef _M_AMD64</div><div class="code_line">const size_t RET_ADDR_STACK_OFFSET = 3;</div><div class="code_line">#endif</div><div class="code_line">&nbsp;</div><div class="code_line">// получим адрес возврата</div><div class="code_line">&nbsp;</div><div class="code_line">#pragma warning (push)</div><div class="code_line">#pragma warning (disable:4700)</div><div class="code_line">#pragma optimize (&quot;&quot;, off)</div><div class="code_line">// ..........................................................................</div><div class="code_line">PVOID WINAPI meas_f(void)</div><div class="code_line">{</div><div class="code_line">&nbsp;volatile PVOID caller = (PVOID)(&amp;caller)[RET_ADDR_STACK_OFFSET];</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;return caller;</div><div class="code_line">}</div><div class="code_line">// ..........................................................................</div><div class="code_line">#pragma optimize (&quot;&quot;, on)</div><div class="code_line">#pragma warning (pop)</div></ol></div></div></div></div><br>
<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">class I_A</div><div class="code_line">{</div><div class="code_line">&nbsp;protected:</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; PVOID addr;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;public:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;virtual ~I_A() {}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;virtual void f () = 0;</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">class B : virtual public I_A</div><div class="code_line">{</div><div class="code_line">&nbsp;public:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;B() {}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;virtual ~B(){}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;virtual void f ();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;virtual void GetAddr2 ();</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">void B::f()</div><div class="code_line">{</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">void B::GetAddr2 ()</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;addr = meas_f();</div><div class="code_line">&nbsp;&nbsp;_tprintf (_T(&quot;%s addr=%p\n&quot;),_T(__FUNCTION__),addr);</div><div class="code_line">}</div></ol></div></div></div></div><br>
<br>
Если смастерить разных типов родственных классов то можно зафиксировать<br>
различие адресов. Не буду приводить все исходники.]]></description>
        <author>ЫукпШ</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=202763&amp;view=findpost&amp;p=3939338</guid>
        <pubDate>Sat, 05 Sep 2026 13:49:14 +0000</pubDate>
        <title>Определение конкретного типа методом научного тыка</title>
        <link>https://forum.sources.ru/index.php?showtopic=202763&amp;view=findpost&amp;p=3939338</link>
        <description><![CDATA[Majestio: Ой  :blink: Случайно заглянул ... А как на счет множественного (виртуального и невиртуального) наследования? ... Эти ваши &quot;уау-фишки&quot; тоже заработают? :rolleyes:]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=202763&amp;view=findpost&amp;p=1695870</guid>
        <pubDate>Thu, 13 Sep 2007 15:07:51 +0000</pubDate>
        <title>Определение конкретного типа методом научного тыка</title>
        <link>https://forum.sources.ru/index.php?showtopic=202763&amp;view=findpost&amp;p=1695870</link>
        <description><![CDATA[nawok78: писал библиотечку классов на голом С<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">typedef struct _TObjectClass TObjectClass;</div><div class="code_line">struct TObject</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;TObjectClass *Class;</div><div class="code_line">&nbsp;&nbsp;...</div><div class="code_line">}</div><div class="code_line">struct _TObjectClass</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;const char *ClassName();</div><div class="code_line">&nbsp;&nbsp;TObjectClass *ParentClass();</div><div class="code_line">}</div><div class="code_line">static TObjectClass *AObjectClass=NULL;//-один для всего класса инициализируется при вызове первого конструктора</div><div class="code_line">//наследники от TObject</div><div class="code_line">typedef struct _TObject1Class TObject1Class;</div><div class="code_line">struct TObject1</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;TObject Parent;</div><div class="code_line">&nbsp;&nbsp;...</div><div class="code_line">}</div><div class="code_line">struct _TObject1Class</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;TObjectClass ParentClass;</div><div class="code_line">&nbsp;&nbsp;...</div><div class="code_line">}</div><div class="code_line">static TObject1Class *AObject1Class=NULL;//-один для всего класса инициализируется при вызове первого конструктора</div><div class="code_line">&nbsp;</div><div class="code_line">//наследники от TObject1</div><div class="code_line">typedef struct _TObject2Class TObject2Class;</div><div class="code_line">struct TObject2</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;TObject1 Parent;</div><div class="code_line">&nbsp;&nbsp;...</div><div class="code_line">}</div><div class="code_line">struct _TObject1Class</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;TObject1Class ParentClass;</div><div class="code_line">&nbsp;&nbsp;...</div><div class="code_line">}</div><div class="code_line">static TObject2Class *AObject2Class=NULL;//-один для всего класса инициализируется при вызове первого конструктора</div></ol></div></div></div></div><br>
в таком случае вполне можно было узнать тот ли это клас или наследник (рекурсией с выходом FALSE по условию Class-&gt;ParentClass=NULL, либо TRUE если см ниже):<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">((TObject*) A)-&#62;Class==((TObject*) B)-&#62;Class;</div></ol></div></div></div></div>]]></description>
        <author>nawok78</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=202763&amp;view=findpost&amp;p=1695690</guid>
        <pubDate>Thu, 13 Sep 2007 13:02:18 +0000</pubDate>
        <title>Определение конкретного типа методом научного тыка</title>
        <link>https://forum.sources.ru/index.php?showtopic=202763&amp;view=findpost&amp;p=1695690</link>
        <description><![CDATA[Gunnar: Оооооооооо&#33; Вот это идея. Спасибо&#33;]]></description>
        <author>Gunnar</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=202763&amp;view=findpost&amp;p=1695495</guid>
        <pubDate>Thu, 13 Sep 2007 10:50:50 +0000</pubDate>
        <title>Определение конкретного типа методом научного тыка</title>
        <link>https://forum.sources.ru/index.php?showtopic=202763&amp;view=findpost&amp;p=1695495</link>
        <description><![CDATA[Hryak: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=202763&view=findpost&p=1695432'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Gunnar &#064; <time class="tag-quote__quoted-time" datetime="2007-09-13T10:03:07+00:00">13.09.07, 10:03</time></span><div class='quote '>Можно сделать вот такой хак (первое, что пришло в голову)</div></div><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">#define DEFINE_GET_SIGN_METHOD &nbsp;virtual void* GetSign() const { static Sign sign; return &sign; }</div><div class="code_line">&nbsp;</div><div class="code_line">class A </div><div class="code_line">{</div><div class="code_line">protected:</div><div class="code_line">&nbsp;&nbsp; &nbsp;struct Sign {};</div><div class="code_line">public:</div><div class="code_line">&nbsp;&nbsp; &nbsp;static bool IsEqualClass(const A&amp; a1, const A&amp; a2) { return a1.GetSign() == a2.GetSign(); }</div><div class="code_line">protected:</div><div class="code_line">&nbsp;&nbsp; &nbsp;DEFINE_GET_SIGN_METHOD</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">class C1 : public A</div><div class="code_line">{</div><div class="code_line">protected:</div><div class="code_line">&nbsp;&nbsp; &nbsp;DEFINE_GET_SIGN_METHOD</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">class C2 : public A</div><div class="code_line">{</div><div class="code_line">protected:</div><div class="code_line">&nbsp;&nbsp; &nbsp;DEFINE_GET_SIGN_METHOD</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">void main()</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;A* p1 = new C1;</div><div class="code_line">&nbsp;&nbsp; &nbsp;A* p2 = new C2;</div><div class="code_line">&nbsp;&nbsp; &nbsp;bool b1 = A::IsEqualClass(*p1, *p2);</div><div class="code_line">}</div></ol></div></div></div></div>]]></description>
        <author>Hryak</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=202763&amp;view=findpost&amp;p=1695473</guid>
        <pubDate>Thu, 13 Sep 2007 10:32:59 +0000</pubDate>
        <title>Определение конкретного типа методом научного тыка</title>
        <link>https://forum.sources.ru/index.php?showtopic=202763&amp;view=findpost&amp;p=1695473</link>
        <description><![CDATA[Gunnar: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=202763&view=findpost&p=1695460'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>LuckLess &#064; <time class="tag-quote__quoted-time" datetime="2007-09-13T10:19:46+00:00">13.09.07, 10:19</time></span><div class='quote '>только если все классы C1, C2 ... CN гарантировано переопределяют эту функцию сами&#33; А не в базовом классе.., скажем.</div></div><br>
Ну это понятно.<br>
<br>
Как бы это по красивее реализовать? есть идеи?]]></description>
        <author>Gunnar</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=202763&amp;view=findpost&amp;p=1695460</guid>
        <pubDate>Thu, 13 Sep 2007 10:19:46 +0000</pubDate>
        <title>Определение конкретного типа методом научного тыка</title>
        <link>https://forum.sources.ru/index.php?showtopic=202763&amp;view=findpost&amp;p=1695460</link>
        <description><![CDATA[LuckLess: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=202763&view=findpost&p=1695432'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Gunnar &#064; <time class="tag-quote__quoted-time" datetime="2007-09-13T10:03:07+00:00">13.09.07, 10:03</time></span><div class='quote '>ну как?</div></div><br>
нуу.. работать будет  :rolleyes: <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2007-09-13T10:20:50+00:00">13.09.07, 10:20</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=202763&view=findpost&p=1695460'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>LuckLess &#064; <time class="tag-quote__quoted-time" datetime="2007-09-13T10:19:46+00:00">13.09.07, 10:19</time></span><div class='quote '>нуу.. работать будет :rolleyes:</div></div><br>
только если все классы C1, C2 ... CN гарантировано переопределяют эту функцию сами&#33; А не в базовом классе.., скажем.]]></description>
        <author>LuckLess</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=202763&amp;view=findpost&amp;p=1695432</guid>
        <pubDate>Thu, 13 Sep 2007 10:03:07 +0000</pubDate>
        <title>Определение конкретного типа методом научного тыка</title>
        <link>https://forum.sources.ru/index.php?showtopic=202763&amp;view=findpost&amp;p=1695432</link>
        <description><![CDATA[Gunnar: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=202763&view=findpost&p=1695431'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>archimed7592 &#064; <time class="tag-quote__quoted-time" datetime="2007-09-13T10:00:14+00:00">13.09.07, 10:00</time></span><div class='quote '>dynamic_cast - это тоже rtti?</div></div><br>
Ну дык да. Вмысле он реализован, используя RTTI. <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2007-09-13T10:09:57+00:00">13.09.07, 10:09</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=202763&view=findpost&p=1695431'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>archimed7592 &#064; <time class="tag-quote__quoted-time" datetime="2007-09-13T10:00:14+00:00">13.09.07, 10:00</time></span><div class='quote '>как ты узнаешь этот адрес </div></div><br>
Вот это как раз самое интересное.<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">class A</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;virtual ~A () {}</div><div class="code_line">&nbsp;&nbsp;virtual void f () = 0;</div><div class="code_line">&nbsp;&nbsp;virtual bool compare (const A&amp; a) = 0;</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">struct A_vtbl</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;ptr_t dtor;</div><div class="code_line">&nbsp;&nbsp;ptr_t f;</div><div class="code_line">&nbsp;&nbsp;ptr_t compare;</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">class C1 : public A</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;virtual void f () {}</div><div class="code_line">&nbsp;&nbsp;virtual bool compare (const A&amp; a)</div><div class="code_line">&nbsp;&nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; A_vtbl* pvtbl_a = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; A_vtbl* pvtbl_this = 0; </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; pvtbl_a = *((A_vtbl**)&amp;a);</div><div class="code_line">&nbsp;&nbsp; &nbsp; pvtbl_this = *((A_vtbl**)this);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; if (pvtbl_a-&#62;f != pvtbl_this-&#62;f)</div><div class="code_line">&nbsp;&nbsp; &nbsp; {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return false;</div><div class="code_line">&nbsp;&nbsp; &nbsp; }</div><div class="code_line">&nbsp;&nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; // &nbsp;Bla bla bla</div><div class="code_line">&nbsp;&nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; return smth;</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">};</div></ol></div></div></div></div><br>
<br>
ну как?]]></description>
        <author>Gunnar</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=202763&amp;view=findpost&amp;p=1695431</guid>
        <pubDate>Thu, 13 Sep 2007 10:00:14 +0000</pubDate>
        <title>Определение конкретного типа методом научного тыка</title>
        <link>https://forum.sources.ru/index.php?showtopic=202763&amp;view=findpost&amp;p=1695431</link>
        <description><![CDATA[archimed7592: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=202763&view=findpost&p=1695328'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Gunnar &#064; <time class="tag-quote__quoted-time" datetime="2007-09-13T09:08:52+00:00">13.09.07, 09:08</time></span><div class='quote '>достаточно ли сравнить адрес этой функции у двух обьектов, чтобы знать одного они типа или нет?</div></div><br>
Должно, если все классы переопределяют эту ф-цию, только вот проблема: как ты узнаешь этот адрес :)?<br>
<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=202763&view=findpost&p=1695328'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Gunnar &#064; <time class="tag-quote__quoted-time" datetime="2007-09-13T09:08:52+00:00">13.09.07, 09:08</time></span><div class='quote '>Не юзать RTTI</div></div><br>
dynamic_cast - это тоже rtti? :)]]></description>
        <author>archimed7592</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=202763&amp;view=findpost&amp;p=1695426</guid>
        <pubDate>Thu, 13 Sep 2007 09:59:01 +0000</pubDate>
        <title>Определение конкретного типа методом научного тыка</title>
        <link>https://forum.sources.ru/index.php?showtopic=202763&amp;view=findpost&amp;p=1695426</link>
        <description><![CDATA[Hryak: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=202763&view=findpost&p=1695328'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Gunnar &#064; <time class="tag-quote__quoted-time" datetime="2007-09-13T09:08:52+00:00">13.09.07, 09:08</time></span><div class='quote '>Вот взбрела такая идея в голову:<br>
Имея чисто виртуальную функцию f, достаточно ли сравнить адрес этой функции у двух обьектов, чтобы знать одного они типа или нет?</div></div><br>
Адрес метода можно взять только у класса - не у объекта. Так что не прокатит.]]></description>
        <author>Hryak</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=202763&amp;view=findpost&amp;p=1695328</guid>
        <pubDate>Thu, 13 Sep 2007 09:08:52 +0000</pubDate>
        <title>Определение конкретного типа методом научного тыка</title>
        <link>https://forum.sources.ru/index.php?showtopic=202763&amp;view=findpost&amp;p=1695328</link>
        <description><![CDATA[Gunnar: Всем привет&#33;<br>
<br>
Проблема следующая:<br>
Есть N конкретных классов C1, C2, ....., CN<br>
Все они наследуются от абстрактного класса A<br>
<br>
Задача:<br>
Реализовать механизм сравнения обьектов любого из классов С с любым другим.<br>
<br>
Ограничения:<br>
Не юзать RTTI и поля типа.<br>
<br>
Множественную передачу не предлагать - слишком геморно.<br>
<br>
Вот взбрела такая идея в голову:<br>
Имея чисто виртуальную функцию f, достаточно ли сравнить адрес этой функции у двух обьектов, чтобы знать одного они типа или нет?<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">class A</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;virtual ~A () {}</div><div class="code_line">&nbsp;&nbsp;virtual void f () = 0;</div><div class="code_line">&nbsp;&nbsp;virtual bool compare (const A&amp; a) = 0;</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">class C1 : public A</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;virtual void f () {}</div><div class="code_line">&nbsp;&nbsp;virtual bool compare (const A&amp; a)</div><div class="code_line">&nbsp;&nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; if (/*адреса f для a и this разные*/)</div><div class="code_line">&nbsp;&nbsp; &nbsp; {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return false;</div><div class="code_line">&nbsp;&nbsp; &nbsp; }</div><div class="code_line">&nbsp;&nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; // &nbsp;Bla bla bla</div><div class="code_line">&nbsp;&nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; return smth;</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">class C2 : public A</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;virtual void f () {}</div><div class="code_line">&nbsp;&nbsp;virtual bool compare (const A&amp; a)</div><div class="code_line">&nbsp;&nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; if (/*адреса f для a и this разные*/)</div><div class="code_line">&nbsp;&nbsp; &nbsp; {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return false;</div><div class="code_line">&nbsp;&nbsp; &nbsp; }</div><div class="code_line">&nbsp;&nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; // &nbsp;Bla bla bla</div><div class="code_line">&nbsp;&nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; return smth;</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">};</div></ol></div></div></div></div><br>
<br>
Как думаете будет работать?<br>
И главный вопрос: как сделать это самое сравнение по безопаснее и по переносимее?]]></description>
        <author>Gunnar</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      </channel>
      </rss>
	