<?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[Umgehung von RTTI: &amp;quot;Elegantere&amp;quot; Lösung?]]></title><description><![CDATA[<p>Hi,</p>
<p>in meinen Programmen leitet jede Klasse von der Klasse &quot;object&quot; ab. Da ich schon mal zur Laufzeit wissen muss, welche Klasse jetzt welche ist, benutze ich typeid. Das ist natürlich ordentlich langsam und &quot;unschön&quot;, vorallem wenn ich nur den Namen der Klasse brauche.</p>
<p>Jetzt hab ich folgendes probiert, was auch wunderbar funktioniert - jedoch finde ich diesen Lösungsansatz nicht sehr elegant.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;

class object
{
public:  
    virtual std::string get_class_name (void) const
    {
        static std::string value = std::string (__FUNCTION__).substr (0, std::string (__FUNCTION__).find_first_of (&quot;:&quot;));
        return value;
    }
};

class object_a : public object
{
    virtual std::string get_class_name (void) const
    {
        static std::string value = std::string (__FUNCTION__).substr (0, std::string (__FUNCTION__).find_first_of (&quot;:&quot;));
        return value;
    }
};

int main (void)
{
    object obj;
    std::cout &lt;&lt; obj.get_class_name () &lt;&lt; std::endl; // Ausgabe: object

    object_a obj_a;
    std::cout &lt;&lt; obj_a.get_class_name () &lt;&lt; std::endl; // Ausgabe: object_a

    return 0;
}
</code></pre>
<p>Es ist doof das ich exakt den selben Code in jeder Klasse habe.</p>
<p>Daher meine Frage: kennt wer einen schöneren Lösungsansatz?</p>
<p>Viele liebe Grüße.</p>
<p>p.s.: Bitte keine Diskussion wofür man sowas braucht.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/222519/umgehung-von-rtti-quot-elegantere-quot-lösung</link><generator>RSS for Node</generator><lastBuildDate>Mon, 05 Oct 2026 01:10:35 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/222519.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 13 Sep 2008 19:41:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Umgehung von RTTI: &amp;quot;Elegantere&amp;quot; Lösung? on Sat, 13 Sep 2008 19:41:17 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>in meinen Programmen leitet jede Klasse von der Klasse &quot;object&quot; ab. Da ich schon mal zur Laufzeit wissen muss, welche Klasse jetzt welche ist, benutze ich typeid. Das ist natürlich ordentlich langsam und &quot;unschön&quot;, vorallem wenn ich nur den Namen der Klasse brauche.</p>
<p>Jetzt hab ich folgendes probiert, was auch wunderbar funktioniert - jedoch finde ich diesen Lösungsansatz nicht sehr elegant.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;

class object
{
public:  
    virtual std::string get_class_name (void) const
    {
        static std::string value = std::string (__FUNCTION__).substr (0, std::string (__FUNCTION__).find_first_of (&quot;:&quot;));
        return value;
    }
};

class object_a : public object
{
    virtual std::string get_class_name (void) const
    {
        static std::string value = std::string (__FUNCTION__).substr (0, std::string (__FUNCTION__).find_first_of (&quot;:&quot;));
        return value;
    }
};

int main (void)
{
    object obj;
    std::cout &lt;&lt; obj.get_class_name () &lt;&lt; std::endl; // Ausgabe: object

    object_a obj_a;
    std::cout &lt;&lt; obj_a.get_class_name () &lt;&lt; std::endl; // Ausgabe: object_a

    return 0;
}
</code></pre>
<p>Es ist doof das ich exakt den selben Code in jeder Klasse habe.</p>
<p>Daher meine Frage: kennt wer einen schöneren Lösungsansatz?</p>
<p>Viele liebe Grüße.</p>
<p>p.s.: Bitte keine Diskussion wofür man sowas braucht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1581477</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1581477</guid><dc:creator><![CDATA[C++&#x27;ler]]></dc:creator><pubDate>Sat, 13 Sep 2008 19:41:17 GMT</pubDate></item><item><title><![CDATA[Reply to Umgehung von RTTI: &amp;quot;Elegantere&amp;quot; Lösung? on Sat, 13 Sep 2008 20:14:59 GMT]]></title><description><![CDATA[<p>C++'ler schrieb:</p>
<blockquote>
<p>p.s.: Bitte keine Diskussion wofür man sowas braucht.</p>
</blockquote>
<p>Eben die wäre nötig um ggf. besser Vorschläge machen zu können...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1581495</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1581495</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Sat, 13 Sep 2008 20:14:59 GMT</pubDate></item><item><title><![CDATA[Reply to Umgehung von RTTI: &amp;quot;Elegantere&amp;quot; Lösung? on Sat, 13 Sep 2008 20:23:21 GMT]]></title><description><![CDATA[<p>Ich wüsste nicht, was so eine diskussion noch bringen sollte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1581500</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1581500</guid><dc:creator><![CDATA[C++&#x27;ler]]></dc:creator><pubDate>Sat, 13 Sep 2008 20:23:21 GMT</pubDate></item><item><title><![CDATA[Reply to Umgehung von RTTI: &amp;quot;Elegantere&amp;quot; Lösung? on Sat, 13 Sep 2008 21:10:43 GMT]]></title><description><![CDATA[<p>Wenn du eine Lösung für ein Problem suchst, solltest du erst mal das Problem beschreiben und nicht deine Lösung, dann kann man dir auch ne andere Lösung sagen. So weiß doch kein Mensch was da rauskommen soll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1581521</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1581521</guid><dc:creator><![CDATA[naja]]></dc:creator><pubDate>Sat, 13 Sep 2008 21:10:43 GMT</pubDate></item><item><title><![CDATA[Reply to Umgehung von RTTI: &amp;quot;Elegantere&amp;quot; Lösung? on Sat, 13 Sep 2008 21:12:21 GMT]]></title><description><![CDATA[<p>C++'ler schrieb:</p>
<blockquote>
<p>Ich wüsste nicht, was so eine diskussion noch bringen sollte.</p>
</blockquote>
<p>Ein besseres Design und Aufbau der Klassenhierarchie.<br />
Ich habe noch nie erlebt, dass alle meine Klassen von einer einzigen Basisklasse geerbt haben. Das ist meistens eher ein Designfehler und es wird einem auch wunderbar dadurch gezeigt, dass du gerade eine Sache irgendwie durchfrickeln willst.<br />
Es darf eigentlich nie vorkommen, dass man eine Basisklasse hat und man dann herausfinden muss, welche abgeleitete Klasse es nun genau ist. Deshalb gilt auch die Verwendung des <code>dynamic_cast</code> s als ein Designfehler, bzw. dessen Verwendung sollte eher sehr selten sein.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1581522</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1581522</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sat, 13 Sep 2008 21:12:21 GMT</pubDate></item><item><title><![CDATA[Reply to Umgehung von RTTI: &amp;quot;Elegantere&amp;quot; Lösung? on Sat, 13 Sep 2008 21:19:02 GMT]]></title><description><![CDATA[<p>@ Dravere<br />
Ich kann kein 8 Jahre altes Programm so einfach umschreiben das auf &gt;500 Kundenrechnern läuft! Ich benötige nur den Klassennamen zur Laufzeit</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1581524</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1581524</guid><dc:creator><![CDATA[C++&#x27;ler]]></dc:creator><pubDate>Sat, 13 Sep 2008 21:19:02 GMT</pubDate></item><item><title><![CDATA[Reply to Umgehung von RTTI: &amp;quot;Elegantere&amp;quot; Lösung? on Sat, 13 Sep 2008 21:24:05 GMT]]></title><description><![CDATA[<p>@mods:<br />
könnt topic schließen, hab was gefunden. wenn es nach einigen hier geht dürfte man nicht z. B. mal einen double dispatcher implementieren. frechheit</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1581528</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1581528</guid><dc:creator><![CDATA[C++&#x27;ler]]></dc:creator><pubDate>Sat, 13 Sep 2008 21:24:05 GMT</pubDate></item><item><title><![CDATA[Reply to Umgehung von RTTI: &amp;quot;Elegantere&amp;quot; Lösung? on Sat, 13 Sep 2008 21:51:51 GMT]]></title><description><![CDATA[<p>C++'ler schrieb:</p>
<blockquote>
<p>wenn es nach einigen hier geht dürfte man nicht z. B. mal einen double dispatcher implementieren. frechheit</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Du hättest gleich sagen sollen, dass es um's Modifizieren von einer größeren Software geht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> Dein Anfangs-Beitrag sah wohl nicht nur für mich so aus, als würdest du ein neues Projekt planen.<br />
Darf man denn aus Neugierde (und ohne Diskussion meinerseits, versprochen) fragen, wofür genau du die Klassennamen brauchst?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1581533</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1581533</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sat, 13 Sep 2008 21:51:51 GMT</pubDate></item><item><title><![CDATA[Reply to Umgehung von RTTI: &amp;quot;Elegantere&amp;quot; Lösung? on Sat, 13 Sep 2008 21:57:34 GMT]]></title><description><![CDATA[<p>@ Badestrand<br />
Für System-Logging (ich kann nicht zum Debuggen 500km weit fahren, wenn was nicht geht), Reflektion, die GUI, Konfiguration der Anwendung - was in der Datenbank gesichert wird, uvm.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1581534</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1581534</guid><dc:creator><![CDATA[C++&#x27;ler]]></dc:creator><pubDate>Sat, 13 Sep 2008 21:57:34 GMT</pubDate></item><item><title><![CDATA[Reply to Umgehung von RTTI: &amp;quot;Elegantere&amp;quot; Lösung? on Sat, 13 Sep 2008 22:16:55 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>C++'ler schrieb:</p>
<blockquote>
<p>Ich wüsste nicht, was so eine diskussion noch bringen sollte.</p>
</blockquote>
<p>Ein besseres Design und Aufbau der Klassenhierarchie.<br />
Ich habe noch nie erlebt, dass alle meine Klassen von einer einzigen Basisklasse geerbt haben. Das ist meistens eher ein Designfehler und es wird einem auch wunderbar dadurch gezeigt, dass du gerade eine Sache irgendwie durchfrickeln willst.<br />
Es darf eigentlich nie vorkommen, dass man eine Basisklasse hat und man dann herausfinden muss, welche abgeleitete Klasse es nun genau ist. Deshalb gilt auch die Verwendung des <code>dynamic_cast</code> s als ein Designfehler, bzw. dessen Verwendung sollte eher sehr selten sein.</p>
<p>Grüssli</p>
</blockquote>
<p>Ja, genau Java ist ein großer Designfehler *flame* XD</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1581540</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1581540</guid><dc:creator><![CDATA[Zeus]]></dc:creator><pubDate>Sat, 13 Sep 2008 22:16:55 GMT</pubDate></item><item><title><![CDATA[Reply to Umgehung von RTTI: &amp;quot;Elegantere&amp;quot; Lösung? on Sat, 13 Sep 2008 22:22:20 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/4791">@Zeus</a>:<br />
Jo, C#, Smalltalk, PHP, Ruby und co. und alle Sprachen die Reflection unterstützten sind ein Designfehler.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1581543</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1581543</guid><dc:creator><![CDATA[Morendus]]></dc:creator><pubDate>Sat, 13 Sep 2008 22:22:20 GMT</pubDate></item><item><title><![CDATA[Reply to Umgehung von RTTI: &amp;quot;Elegantere&amp;quot; Lösung? on Sat, 13 Sep 2008 23:43:10 GMT]]></title><description><![CDATA[<p>C++'ler schrieb:</p>
<blockquote>
<p>@mods:<br />
könnt topic schließen, hab was gefunden. (...)</p>
</blockquote>
<p>Fände es nett wenn du posten würdest WAS du gefunden hast.</p>
<p>BTW: gegen double-dispatch wird wohl kaum ein vernünftiger Designer/Programmierer was haben <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1581577</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1581577</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sat, 13 Sep 2008 23:43:10 GMT</pubDate></item></channel></rss>