<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Laufzeitpolymorphie, performanteste Realisierung gesucht]]></title><description><![CDATA[<p>Hallo Kollegen,</p>
<p>gegeben sei folgende Objekt-Struktur auf die ich keinen Einfluss habe.<br />
Ich habe sie für dieses Forum etwas vereinfacht:</p>
<pre><code class="language-cpp">// Definition der Eigenschaften
class BaseProperty { ... };

class AProperty : public BaseProperty { ... };
class BProperty : public BaseProperty { ... };

// Definition eines Objekt-Typen
class ObjDescription
{
private:
  std::vector&lt;BaseProperty*&gt; mProperties;
public:
  bool hasElch() const
  {
    boost_foreach(mProperties, oneProperty)
    {
       // Casus Knackus
       if ( dynamic_cast&lt;ElchProperty*&gt; (oneProperty) )
         return true;
    }
    return false;
  }
  // analog templatisiert
  bool hasGeneric&lt;class PropertyClass&gt; () const { ... }; 
}
</code></pre>
<p>Leider ist dieses System voller Dynamic_Casts, siehe &quot;Casus Knackus&quot;.</p>
<p>Momentan spiele ich mit dem Gedanken die dynamic_casts durch etwas &quot;schnelleres&quot; und evtl. Schöneres zu ersetzen, z.B. typeid.</p>
<p>Was habt ihr so für Vorschläge und Ideen ?<br />
Erlaubt sind C++, STL und Boost.</p>
<p>Gruß<br />
nurF</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/284248/laufzeitpolymorphie-performanteste-realisierung-gesucht</link><generator>RSS for Node</generator><lastBuildDate>Sat, 22 Aug 2026 05:34:19 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/284248.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 28 Mar 2011 16:45:03 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Laufzeitpolymorphie, performanteste Realisierung gesucht on Mon, 28 Mar 2011 16:47:44 GMT]]></title><description><![CDATA[<p>Hallo Kollegen,</p>
<p>gegeben sei folgende Objekt-Struktur auf die ich keinen Einfluss habe.<br />
Ich habe sie für dieses Forum etwas vereinfacht:</p>
<pre><code class="language-cpp">// Definition der Eigenschaften
class BaseProperty { ... };

class AProperty : public BaseProperty { ... };
class BProperty : public BaseProperty { ... };

// Definition eines Objekt-Typen
class ObjDescription
{
private:
  std::vector&lt;BaseProperty*&gt; mProperties;
public:
  bool hasElch() const
  {
    boost_foreach(mProperties, oneProperty)
    {
       // Casus Knackus
       if ( dynamic_cast&lt;ElchProperty*&gt; (oneProperty) )
         return true;
    }
    return false;
  }
  // analog templatisiert
  bool hasGeneric&lt;class PropertyClass&gt; () const { ... }; 
}
</code></pre>
<p>Leider ist dieses System voller Dynamic_Casts, siehe &quot;Casus Knackus&quot;.</p>
<p>Momentan spiele ich mit dem Gedanken die dynamic_casts durch etwas &quot;schnelleres&quot; und evtl. Schöneres zu ersetzen, z.B. typeid.</p>
<p>Was habt ihr so für Vorschläge und Ideen ?<br />
Erlaubt sind C++, STL und Boost.</p>
<p>Gruß<br />
nurF</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2041412</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2041412</guid><dc:creator><![CDATA[nurf]]></dc:creator><pubDate>Mon, 28 Mar 2011 16:47:44 GMT</pubDate></item><item><title><![CDATA[Reply to Laufzeitpolymorphie, performanteste Realisierung gesucht on Mon, 28 Mar 2011 16:54:39 GMT]]></title><description><![CDATA[<p>Nur, dass ich das richtig versteh: ObjDescription darfst Du ändern, die anderen Klassen aber nicht? Sonst wäre theoretisch auch ein polymorpher Ansatz möglich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2041421</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2041421</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Mon, 28 Mar 2011 16:54:39 GMT</pubDate></item><item><title><![CDATA[Reply to Laufzeitpolymorphie, performanteste Realisierung gesucht on Mon, 28 Mar 2011 17:22:02 GMT]]></title><description><![CDATA[<p>Du könntest Zeiger auf konstante <code>std::type_info</code> s in einem separaten Container C speichern, welche die Typinformationen der Elemente aus <code>mProperties</code> enthalten. Mit <code>std::type_info::before()</code> könntest du C sortieren. Die beiden Container müssen natürlich synchron gehalten werden, ansonsten ändert sich C nicht.</p>
<p>Ob ein Elch vorhanden ist, kannst du nun mit <code>std::binary_search</code> prüfen. Das zu suchende Argument erhältst du durch <code>typeid(ElchProperty)</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2041439</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2041439</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 28 Mar 2011 17:22:02 GMT</pubDate></item><item><title><![CDATA[Reply to Laufzeitpolymorphie, performanteste Realisierung gesucht on Mon, 28 Mar 2011 17:51:19 GMT]]></title><description><![CDATA[<p>Eisflamme schrieb:</p>
<blockquote>
<p>Nur, dass ich das richtig versteh: ObjDescription darfst Du ändern, die anderen Klassen aber nicht? Sonst wäre theoretisch auch ein polymorpher Ansatz möglich.</p>
</blockquote>
<p>Ich darf die Implementierung der &quot;hasElch&quot; Funktion verändern, darüber hinaus gehende Änderungen muss man genauer analysieren.<br />
Momentan gibt es über 50 Property-Klassen. Beschreibe doch mal deinen polymorphen Ansatz.</p>
<p>Nexus schrieb:</p>
<blockquote>
<p>Du könntest Zeiger auf konstante <code>std::type_info</code> s in einem separaten Container C speichern, welche die Typinformationen der Elemente aus <code>mProperties</code> enthalten. Mit <code>std::type_info::before()</code> könntest du C sortieren. Die beiden Container müssen natürlich synchron gehalten werden, ansonsten ändert sich C nicht.</p>
<p>Ob ein Elch vorhanden ist, kannst du nun mit <code>std::binary_search</code> prüfen. Das zu suchende Argument erhältst du durch <code>typeid(ElchProperty)</code> .</p>
</blockquote>
<p>Sowas in der Art schwebt mir momentan auch vor.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2041449</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2041449</guid><dc:creator><![CDATA[nurf]]></dc:creator><pubDate>Mon, 28 Mar 2011 17:51:19 GMT</pubDate></item><item><title><![CDATA[Reply to Laufzeitpolymorphie, performanteste Realisierung gesucht on Mon, 28 Mar 2011 18:06:41 GMT]]></title><description><![CDATA[<p>Wenn du nur hasElch ändern darfst, hast du wenig möglichkeiten.</p>
<p>Ansonsten ein hasElch Flag, das schon beim hinzufügen zu mProperties gesetzt wird, wenn einfügen viel seltener passiert als hasElch</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2041462</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2041462</guid><dc:creator><![CDATA[mückendastch]]></dc:creator><pubDate>Mon, 28 Mar 2011 18:06:41 GMT</pubDate></item></channel></rss>