<?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[[portable typeID] gibt es sowas?]]></title><description><![CDATA[<p>Hallo<br />
ich implementiere frag das factory pattern mit templates und frage mich, ob es eine plattform/compiler-unabhänge typbennenung gibt.</p>
<p>derzeit:</p>
<pre><code class="language-cpp">string getID() { return T::ID; }
</code></pre>
<p>besser wäre sowas wie:</p>
<pre><code class="language-cpp">string getID() { return trypeID(T).name(); }
</code></pre>
<p>problem: ich schreibe damit dateien raus, die ich auf diversen systemen einlesen muss. und aus irgendeinem grund ist z.B. unter Linux das ergebnis der klasse &quot;Test&quot; = &quot;ATest&quot; und unter windows (vc) =&quot;Test&quot;<br />
--&gt; nicht das gewünschte ergebnis</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/184355/portable-typeid-gibt-es-sowas</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 18:31:01 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/184355.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 14 Jun 2007 14:23:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [portable typeID] gibt es sowas? on Thu, 14 Jun 2007 14:23:35 GMT]]></title><description><![CDATA[<p>Hallo<br />
ich implementiere frag das factory pattern mit templates und frage mich, ob es eine plattform/compiler-unabhänge typbennenung gibt.</p>
<p>derzeit:</p>
<pre><code class="language-cpp">string getID() { return T::ID; }
</code></pre>
<p>besser wäre sowas wie:</p>
<pre><code class="language-cpp">string getID() { return trypeID(T).name(); }
</code></pre>
<p>problem: ich schreibe damit dateien raus, die ich auf diversen systemen einlesen muss. und aus irgendeinem grund ist z.B. unter Linux das ergebnis der klasse &quot;Test&quot; = &quot;ATest&quot; und unter windows (vc) =&quot;Test&quot;<br />
--&gt; nicht das gewünschte ergebnis</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1305759</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1305759</guid><dc:creator><![CDATA[muffmolch]]></dc:creator><pubDate>Thu, 14 Jun 2007 14:23:35 GMT</pubDate></item><item><title><![CDATA[Reply to [portable typeID] gibt es sowas? on Thu, 14 Jun 2007 14:26:18 GMT]]></title><description><![CDATA[<p>typeid ist von Compiler zu Compiler unterschiedlich. Also auch innerhalb einer Platform. Als weltweite ID ist sie also eher nicht zu gebrauchen. Mußt du auf jeden Fall hart codiert selbst eine ID vergeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1305760</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1305760</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Thu, 14 Jun 2007 14:26:18 GMT</pubDate></item><item><title><![CDATA[Reply to [portable typeID] gibt es sowas? on Thu, 14 Jun 2007 14:27:08 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>soweit ich weiß, sind diese Typinformationen selbst nicht standardisiert =&gt; Jeder Compiler darf machen, was er will.<br />
Aber immerhin kannst Du es auch selbst machen ... dann hast Du natürlich ein &quot;compiler- und plattformübergreifendes System&quot;.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1305761</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1305761</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Thu, 14 Jun 2007 14:27:08 GMT</pubDate></item><item><title><![CDATA[Reply to [portable typeID] gibt es sowas? on Fri, 15 Jun 2007 08:42:36 GMT]]></title><description><![CDATA[<p>was genau meinst du mit selber machen?</p>
<p>derzeit muss ich meine Klassen immer um folgende elemente erweitern, damit ich das creator template nutzen kann:</p>
<pre><code class="language-cpp">class A{
public:
const static std::string objectTypeID;
static A* create() { return new A(); }
virtual std::string getObjectTypeID() { return A::objectTypeID; }

};
</code></pre>
<p>und eigentlich finde ich es etwas lästig. da wäre mir so eine &quot;automatische&quot; typerkennung recht lieb.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1306342</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1306342</guid><dc:creator><![CDATA[muffmolch]]></dc:creator><pubDate>Fri, 15 Jun 2007 08:42:36 GMT</pubDate></item><item><title><![CDATA[Reply to [portable typeID] gibt es sowas? on Fri, 15 Jun 2007 09:24:15 GMT]]></title><description><![CDATA[<p>muffmolch schrieb:</p>
<blockquote>
<p>was genau meinst du mit selber machen?...</p>
</blockquote>
<p>Genau das, was Du da tust. <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="😃"
    /><br />
&quot;Lästig&quot; aber IIRC die einzige portable/zuverlässige Möglichkeit.<br />
Vielleicht wird das mit einem neuen Standard ja anders ....</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1306371</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1306371</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Fri, 15 Jun 2007 09:24:15 GMT</pubDate></item><item><title><![CDATA[Reply to [portable typeID] gibt es sowas? on Fri, 15 Jun 2007 09:27:17 GMT]]></title><description><![CDATA[<p>oh man. ja, da kommt mal wohl nicht drum rum...<br />
jetzt wollte ich das irgendwie in ein Interface stecken.<br />
Das einzige, was mir noch Schwierigkeiten bereitet, ist die automatische typeID-Zuweisung des static const strings...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1306374</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1306374</guid><dc:creator><![CDATA[muffmolch]]></dc:creator><pubDate>Fri, 15 Jun 2007 09:27:17 GMT</pubDate></item><item><title><![CDATA[Reply to [portable typeID] gibt es sowas? on Fri, 15 Jun 2007 11:13:22 GMT]]></title><description><![CDATA[<p>muffmolch schrieb:</p>
<blockquote>
<p>oh man. ja, da kommt mal wohl nicht drum rum...</p>
</blockquote>
<p>Ist halt eine Folge davon, dass in C++ eigentlich gar keine technischen Formate spezifiziert sind...<br />
Vielleicht ist man da mit der &quot;Optimierungsmöglichkeit für Plattformen&quot; ein wenig zu weit gegangen ... oder man hätte sich einen &quot;ABI-&quot; und einen &quot;native-Modus&quot; ausdenken können. Letztlich haben sie halt eine Programmier<em>sprache</em> spezifiziert und kein Programmier<em>produkt</em>... aber ein wenig &quot;Kompatibilität&quot; hätte wohl gut getan (und wenn man nur fordert, dass typeid() auf allen Plattformen vergleichbare Ergebnisse liefert)....</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1306442</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1306442</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Fri, 15 Jun 2007 11:13:22 GMT</pubDate></item><item><title><![CDATA[Reply to [portable typeID] gibt es sowas? on Fri, 15 Jun 2007 11:50:55 GMT]]></title><description><![CDATA[<p>Ja, ist wirklich an manchen Stellen etwas zu ungenau spezifiziert. Sowas wie den Aufbau einer ID hätte man tatsächlich vorgeben können. Ich denke auch, das niemand typeid benutzt, außer für Debug-Ausgaben oder um einen what-Exception-String etwas informativer zu gestalten. Funktional ist das Ding nutzlos.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1306482</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1306482</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Fri, 15 Jun 2007 11:50:55 GMT</pubDate></item><item><title><![CDATA[Reply to [portable typeID] gibt es sowas? on Fri, 15 Jun 2007 12:13:04 GMT]]></title><description><![CDATA[<p>Artchi schrieb:</p>
<blockquote>
<p>Ich denke auch, das niemand typeid benutzt, außer für Debug-Ausgaben oder um einen what-Exception-String etwas informativer zu gestalten. Funktional ist das Ding nutzlos.</p>
</blockquote>
<p>wieso? wenn man einen pointer auf die basisklasse hat und wissen will, wissen auf wen der wirklich zeigt, ist 'typeid' doch gut zu gebrauchen.<br />
<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/1306512</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1306512</guid><dc:creator><![CDATA[pale dog]]></dc:creator><pubDate>Fri, 15 Jun 2007 12:13:04 GMT</pubDate></item><item><title><![CDATA[Reply to [portable typeID] gibt es sowas? on Fri, 15 Jun 2007 12:18:41 GMT]]></title><description><![CDATA[<p>pale dog schrieb:</p>
<blockquote>
<p>wieso? wenn man einen pointer auf die basisklasse hat und wissen will, wissen auf wen der wirklich zeigt, ist 'typeid' doch gut zu gebrauchen.<br />
<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>
</blockquote>
<p>Ich gebe da Artchi Recht! Was net ( <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="😃"
    /> ) sagt deutet auf ein Design Fehler hin. Mach mir mal ein Beispiel mit typeId und ich mache daraus eins ohne <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1306518</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1306518</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 15 Jun 2007 12:18:41 GMT</pubDate></item><item><title><![CDATA[Reply to [portable typeID] gibt es sowas? on Fri, 15 Jun 2007 12:40:10 GMT]]></title><description><![CDATA[<p>KasF schrieb:</p>
<blockquote>
<p>Mach mir mal ein Beispiel mit typeId und ich mache daraus eins ohne <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
</blockquote>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;typeinfo&gt;
#include &lt;vector&gt;
using namespace std;

class B {public:virtual ~B(){}};
class X : public B {};
class Y : public B {};

vector&lt;B*&gt; vec;

int main()
{
    int s;
    for (s=0; s&lt;10; s++)
    {
        switch (rand()%3)
        {
            case 0:
            vec.push_back (new B);
            break;

            case 1:
            vec.push_back (new X);
            break;

            case 2:
            vec.push_back (new Y);
            break;    
        }
    }

    for (s=0; s&lt;10; s++)
        cout &lt;&lt; typeid(*vec[s]).name() &lt;&lt; &quot; --&gt;\t&quot; 
             &lt;&lt; (typeid(*vec[s])==typeid(B)) &lt;&lt; '\t' 
             &lt;&lt; (typeid(*vec[s])==typeid(X)) &lt;&lt; '\t'
             &lt;&lt; (typeid(*vec[s])==typeid(Y)) 
             &lt;&lt; endl;
}
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1306539</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1306539</guid><dc:creator><![CDATA[pale dog]]></dc:creator><pubDate>Fri, 15 Jun 2007 12:40:10 GMT</pubDate></item><item><title><![CDATA[Reply to [portable typeID] gibt es sowas? on Fri, 15 Jun 2007 12:49:23 GMT]]></title><description><![CDATA[<p>Ein Beispiel das auch Sinn macht, wo du auf unterschiedliche Typen unterschiedlich reagieren musst <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1306549</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1306549</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 15 Jun 2007 12:49:23 GMT</pubDate></item><item><title><![CDATA[Reply to [portable typeID] gibt es sowas? on Fri, 15 Jun 2007 12:49:55 GMT]]></title><description><![CDATA[<p>KasF schrieb:</p>
<blockquote>
<p>Ich gebe da Artchi Recht! Was net ( <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="😃"
    /> ) sagt deutet auf ein Design Fehler hin. Mach mir mal ein Beispiel mit typeId und ich mache daraus eins ohne <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
</blockquote>
<pre><code class="language-cpp">#include &lt;typeinfo&gt;
#include &lt;iostream&gt;
#include &lt;limits&gt;
#include &lt;string&gt;
using namespace std;

template&lt; class T &gt;
void bombensicher( T &amp;a )
{
	string str = &quot;Bitte geben Sie &quot;;

	if ( typeid( a ) == typeid( double ) )
	{
		str += &quot;eine Zahl ein: &quot;;
	}

	if ( typeid( a ) == typeid ( char) )
	{
		str += &quot;ein Zeichen ein: &quot;;
	}

	if ( typeid( a ) == typeid ( string ) )
	{
		str += &quot;eine Zeichenkette ein: &quot;;
	}

	cout &lt;&lt; str;

	while( !( cin &gt;&gt; a ) )
	{
		cin.clear();
		cin.ignore(numeric_limits&lt;streamsize&gt;::max(),'\n'); 
	    cout &lt;&lt; endl &lt;&lt; &quot;Fehlerhafte eingabe! &quot; &lt;&lt; endl &lt;&lt; str;
	}

	cin.ignore(numeric_limits&lt;streamsize&gt;::max(),'\n');
}

int main()
{    
	double	d = 0;
	char	c = 0;
	string  s ;

	bombensicher( d );
	cout &lt;&lt; d &lt;&lt; endl;

	bombensicher( c );
	cout &lt;&lt; c &lt;&lt; endl;

	bombensicher( s );
	cout &lt;&lt; s &lt;&lt; endl;

	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1306550</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1306550</guid><dc:creator><![CDATA[proggingmania]]></dc:creator><pubDate>Fri, 15 Jun 2007 12:49:55 GMT</pubDate></item><item><title><![CDATA[Reply to [portable typeID] gibt es sowas? on Fri, 15 Jun 2007 12:57:30 GMT]]></title><description><![CDATA[<p>Ich habe das Gefühl es grübeln gerade viele Leute um es mir zu zeigen, dass meine Aussage nicht stimmt <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>
<p>proggingmania schrieb:</p>
<blockquote>
<pre><code class="language-cpp">#include &lt;typeinfo&gt;
#include &lt;iostream&gt;
#include &lt;limits&gt;
#include &lt;string&gt;
using namespace std;

template&lt; class T &gt;
void bombensicher( T &amp;a )
{
	string str = &quot;Bitte geben Sie &quot;;

	if ( typeid( a ) == typeid( double ) )
	{
		str += &quot;eine Zahl ein: &quot;;
	}

	if ( typeid( a ) == typeid ( char) )
	{
		str += &quot;ein Zeichen ein: &quot;;
	}

	if ( typeid( a ) == typeid ( string ) )
	{
		str += &quot;eine Zeichenkette ein: &quot;;
	}
	
	cout &lt;&lt; str;

	while( !( cin &gt;&gt; a ) )
	{
		cin.clear();
		cin.ignore(numeric_limits&lt;streamsize&gt;::max(),'\n'); 
	    cout &lt;&lt; endl &lt;&lt; &quot;Fehlerhafte eingabe! &quot; &lt;&lt; endl &lt;&lt; str;
	}

	cin.ignore(numeric_limits&lt;streamsize&gt;::max(),'\n');
}

int main()
{    
	double	d = 0;
	char	c = 0;
	string  s ;
	
	bombensicher( d );
	cout &lt;&lt; d &lt;&lt; endl;
	
	bombensicher( c );
	cout &lt;&lt; c &lt;&lt; endl;
	
	bombensicher( s );
	cout &lt;&lt; s &lt;&lt; endl;

	return 0;
}
</code></pre>
</blockquote>
<p>Sowas würde kein C++ Programmierer schreiben, ein paar überladene Funktionen und gut is die Sache ...</p>
<p>Vllt nen schönes OO - Beispiel, wo jemand denkt er käme ohne typeid nicht aus.</p>
<p>(hoffentlich habe ich mir nicht selber ne Grube gegraben <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/1306554</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1306554</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 15 Jun 2007 12:57:30 GMT</pubDate></item><item><title><![CDATA[Reply to [portable typeID] gibt es sowas? on Fri, 15 Jun 2007 12:59:50 GMT]]></title><description><![CDATA[<p>KasF schrieb:</p>
<blockquote>
<p>Ein Beispiel das auch Sinn macht, wo du auf unterschiedliche Typen unterschiedlich reagieren musst <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
</blockquote>
<p>musste nur etwas abändern...</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;typeinfo&gt;
#include &lt;vector&gt;
using namespace std;

class B {public:virtual ~B(){}};
class X : public B {public:void f(){cout&lt;&lt;&quot;hello B&quot;&lt;&lt;endl;}};
class Y : public B {};

vector&lt;B*&gt; vec;

int main()
{
    int s;
    for (s=0; s&lt;10; s++)
    {
        switch (rand()%3)
        {
            case 0:
            vec.push_back (new B);
            break;

            case 1:
            vec.push_back (new X);
            break;

            case 2:
            vec.push_back (new Y);
            break;    
        }
    }

    for (s=0; s&lt;10; s++)
        if (typeid(*vec[s]) == typeid(X))  // nur X hat f() ;)
            ((X*)vec[s])-&gt;f();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1306562</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1306562</guid><dc:creator><![CDATA[pale dog]]></dc:creator><pubDate>Fri, 15 Jun 2007 12:59:50 GMT</pubDate></item><item><title><![CDATA[Reply to [portable typeID] gibt es sowas? on Fri, 15 Jun 2007 13:01:57 GMT]]></title><description><![CDATA[<p>Hab ich was verpasst, oder warum posten hier alle soviel Code? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1306566</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1306566</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Fri, 15 Jun 2007 13:01:57 GMT</pubDate></item><item><title><![CDATA[Reply to [portable typeID] gibt es sowas? on Fri, 15 Jun 2007 13:02:44 GMT]]></title><description><![CDATA[<p>pale dog schrieb:</p>
<blockquote>
<p>Artchi schrieb:</p>
<blockquote>
<p>Ich denke auch, das niemand typeid benutzt, außer für Debug-Ausgaben oder um einen what-Exception-String etwas informativer zu gestalten. Funktional ist das Ding nutzlos.</p>
</blockquote>
<p>wieso? wenn man einen pointer auf die basisklasse hat und wissen will, wissen auf wen der wirklich zeigt, ist 'typeid' doch gut zu gebrauchen.<br />
<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>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> Verstehe nur Bahnhof...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1306567</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1306567</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Fri, 15 Jun 2007 13:02:44 GMT</pubDate></item><item><title><![CDATA[Reply to [portable typeID] gibt es sowas? on Fri, 15 Jun 2007 13:04:14 GMT]]></title><description><![CDATA[<p>KasF schrieb:</p>
<blockquote>
<p>Sowas würde kein C++ Programmierer schreiben, ein paar überladene Funktionen und gut is die Sache ...</p>
</blockquote>
<p>Geht nicht, zu wenig RAM.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1306569</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1306569</guid><dc:creator><![CDATA[proggingmania]]></dc:creator><pubDate>Fri, 15 Jun 2007 13:04:14 GMT</pubDate></item><item><title><![CDATA[Reply to [portable typeID] gibt es sowas? on Fri, 15 Jun 2007 13:06:39 GMT]]></title><description><![CDATA[<p>KasF schrieb:</p>
<blockquote>
<p>pale dog schrieb:</p>
<blockquote>
<p>wieso? wenn man einen pointer auf die basisklasse hat und wissen will, wissen auf wen der wirklich zeigt, ist 'typeid' doch gut zu gebrauchen.<br />
<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>
</blockquote>
<p>Ich gebe da Artchi Recht! Was net ( <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="😃"
    /> ) sagt deutet auf ein Design Fehler hin. Mach mir mal ein Beispiel mit typeId und ich mache daraus eins ohne <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
</blockquote>
<p>Mußte über diese Antwort seeehr lange nachdenken. Aber jetzt verstehe ich den ganzen unsinnigen geposteten Code.</p>
<p>Ich habe nicht gesagt, das man typeid nicht gebrauchen kann!!! Ich habe gesagt, das ihn niemand benutzt! Warum? Weil typeid nicht zu gebrauchen ist! Aber man KÖNNTE es nutzen, wenn typeid zu gebrauchen WÄRE!</p>
<p>Das der Threadersteller typeid gebrauchen könnte, steht außer fragen. Aber wir mußten ihm klar machen, das er es nicht gebrauchen kann, weil typeid nicht das macht, was er sich erhofft. Und als Lösung für sein Anforderung, muß er sich ein eigenes Typeid bauen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1306573</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1306573</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Fri, 15 Jun 2007 13:06:39 GMT</pubDate></item><item><title><![CDATA[Reply to [portable typeID] gibt es sowas? on Fri, 15 Jun 2007 13:32:17 GMT]]></title><description><![CDATA[<p>pale dog schrieb:</p>
<blockquote>
<p>musste nur etwas abändern...</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;typeinfo&gt;
#include &lt;vector&gt;
using namespace std;

class B {public:virtual ~B(){}};
class X : public B {public:void f(){cout&lt;&lt;&quot;hello B&quot;&lt;&lt;endl;}};
class Y : public B {};

vector&lt;B*&gt; vec;
 	
int main()
{
    int s;
    for (s=0; s&lt;10; s++)
    {
        switch (rand()%3)
        {
            case 0:
            vec.push_back (new B);
            break;
            
            case 1:
            vec.push_back (new X);
            break;
            
            case 2:
            vec.push_back (new Y);
            break;    
        }
    }

    for (s=0; s&lt;10; s++)
        if (typeid(*vec[s]) == typeid(X))  // nur X hat f() ;)
            ((X*)vec[s])-&gt;f();
}
</code></pre>
</blockquote>
<p>Naja nen Code der bissl mehr aussagt und nen Bezug auf die reale Welt hat, wäre zwar schöner, aber dennoch hier:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;typeinfo&gt;
#include &lt;vector&gt;
using namespace std;
enum IAM { BCLASS , XCLASS , YCLASS };

class B { public: virtual ~B(){} virtual  IAM type() const { return BCLASS;} };

class X : public B { public:void f(){cout&lt;&lt;&quot;hello B&quot;&lt;&lt;endl;} virtual  IAM type() const { return XCLASS;}};
class Y : public B { public: virtual  IAM type() const { return YCLASS;} };

vector&lt;B*&gt; vec;

int main()
{
    int s;
    for (s=0; s&lt;10; s++)
    {
        switch (rand()%3)
        {
            case 0:
            vec.push_back (new B);
            break;

            case 1:
            vec.push_back (new X);
            break;

            case 2:
            vec.push_back (new Y);
            break;
        }
    }

    for (s=0; s&lt;10; s++)
        if ( vec[s]-&gt;type() == XCLASS)  // nur X hat f() ;)
            ((X*)vec[s])-&gt;f();
}
</code></pre>
<p>proggingmania schrieb:</p>
<blockquote>
<p>Geht nicht, zu wenig RAM.</p>
</blockquote>
<p>Kauf dir nen neuen Rechner <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /><br />
Zudem macht das nicht viel aus, mit deinem Template werden auch drei Funktion generiert.<br />
Dann sowas wie die Eingabe könnte man noch auslagern ...</p>
<p>Edit: Beispiel abgeändert ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1306589</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1306589</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 15 Jun 2007 13:32:17 GMT</pubDate></item><item><title><![CDATA[Reply to [portable typeID] gibt es sowas? on Fri, 15 Jun 2007 13:29:39 GMT]]></title><description><![CDATA[<p>Oder du behältst dein Code und änderst deine Schleife:</p>
<pre><code class="language-cpp">for (s=0; s&lt;10; s++)
{
    X* xx = dynamic_cast&lt;X*&gt;(vec[s]);
    if ( xx )  
        xx-&gt;f();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1306594</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1306594</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 15 Jun 2007 13:29:39 GMT</pubDate></item><item><title><![CDATA[Reply to [portable typeID] gibt es sowas? on Fri, 15 Jun 2007 13:34:38 GMT]]></title><description><![CDATA[<p>KasF schrieb:</p>
<blockquote>
<p>Naja nen Code der bissl mehr aussagt und nen Bezug auf die reale Welt hat, wäre zwar schöner,</p>
</blockquote>
<p>ist es denn so exotisch, wenn man pointer auf die basisklasse in einen vector steckt?</p>
<p>KasF schrieb:</p>
<blockquote>
<p>aber dennoch hier:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;typeinfo&gt;
#include &lt;vector&gt;
using namespace std;

enum IAM { BCLASS , XCLASS , YCLASS };

class B { IAM matype; public: B(IAM t = BCLASS):matype(t) { }; virtual ~B(){} IAM type() const { return matype; }};

class X : public B { public: X():B(XCLASS) { }; void f(){cout&lt;&lt;&quot;hello B&quot;&lt;&lt;endl;} };
class Y : public B { public: Y():B(YCLASS) { };  };

vector&lt;B*&gt; vec;

int main()
{
    int s;
    for (s=0; s&lt;10; s++)
    {
        switch (rand()%3)
        {
            case 0:
            vec.push_back (new B);
            break;

            case 1:
            vec.push_back (new X);
            break;

            case 2:
            vec.push_back (new Y);
            break;
        }
    }

    for (s=0; s&lt;10; s++)
        if ( vec[s]-&gt;type() == XCLASS)  // nur X hat f() ;)
            ((X*)vec[s])-&gt;f();
}
</code></pre>
</blockquote>
<p>glückwunsch, du hast typeid nachgebaut <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>KasF schrieb:</p>
<blockquote>
<p>Oder du behältst dein Code und änderst deine Schleife:</p>
<pre><code class="language-cpp">for (s=0; s&lt;10; s++)
{
    X* xx = dynamic_cast&lt;X*&gt;(vec[s]);
    if ( xx )  
        xx-&gt;f();
}
</code></pre>
</blockquote>
<p>ich hab' mal gehört, dass 'typeid' sehr schnell geht und konstante laufzeit hat, während 'dynamic_cast' die ganze vererbungshirarchie durchrödeln muss...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1306595</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1306595</guid><dc:creator><![CDATA[pale dog]]></dc:creator><pubDate>Fri, 15 Jun 2007 13:34:38 GMT</pubDate></item><item><title><![CDATA[Reply to [portable typeID] gibt es sowas? on Fri, 15 Jun 2007 13:35:57 GMT]]></title><description><![CDATA[<p>pale dog schrieb:</p>
<blockquote>
<p>glückwunsch, du hast typeid nachgebaut <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>
</blockquote>
<p>Ich habe doch gesagt, das ich es ohne typeid machen kann <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Mit bissl schöner und so meinte ich Sachen wie:<br />
Wieso gibt es kein f() in B. Sollte B abstrakt. Einfach ein Beispiel hinklatschen kann ja jeder, wenn man weiß was der Autor genau machen will, kann man vllt das Design umändern ...</p>
<p>Aber ich glaube wir belassen das hier mal so !</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1306596</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1306596</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 15 Jun 2007 13:35:57 GMT</pubDate></item><item><title><![CDATA[Reply to [portable typeID] gibt es sowas? on Fri, 15 Jun 2007 14:29:47 GMT]]></title><description><![CDATA[<p>KasF schrieb:</p>
<blockquote>
<p>Kauf dir nen neuen Rechner <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
</blockquote>
<p>Geht nicht ist für nen Microcontroller, ohne RAM Erweiterung mit wenig KByte <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1306630</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1306630</guid><dc:creator><![CDATA[proggingmania]]></dc:creator><pubDate>Fri, 15 Jun 2007 14:29:47 GMT</pubDate></item><item><title><![CDATA[Reply to [portable typeID] gibt es sowas? on Fri, 15 Jun 2007 19:45:00 GMT]]></title><description><![CDATA[<p>proggingmania schrieb:</p>
<blockquote>
<p>KasF schrieb:</p>
<blockquote>
<p>Ich gebe da Artchi Recht! Was net ( <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="😃"
    /> ) sagt deutet auf ein Design Fehler hin. Mach mir mal ein Beispiel mit typeId und ich mache daraus eins ohne <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
</blockquote>
<pre><code class="language-cpp">#include &lt;typeinfo&gt;
#include &lt;iostream&gt;
#include &lt;limits&gt;
#include &lt;string&gt;
using namespace std;

template&lt; class T &gt;
void bombensicher( T &amp;a )
{
	string str = &quot;Bitte geben Sie &quot;;

	if ( typeid( a ) == typeid( double ) )
	{
		str += &quot;eine Zahl ein: &quot;;
	}

	if ( typeid( a ) == typeid ( char) )
	{
		str += &quot;ein Zeichen ein: &quot;;
	}

	if ( typeid( a ) == typeid ( string ) )
	{
		str += &quot;eine Zeichenkette ein: &quot;;
	}
	
	cout &lt;&lt; str;

	while( !( cin &gt;&gt; a ) )
	{
		cin.clear();
		cin.ignore(numeric_limits&lt;streamsize&gt;::max(),'\n'); 
	    cout &lt;&lt; endl &lt;&lt; &quot;Fehlerhafte eingabe! &quot; &lt;&lt; endl &lt;&lt; str;
	}

	cin.ignore(numeric_limits&lt;streamsize&gt;::max(),'\n');
}

template&lt; class T &gt;
void bombensicher( T &amp;a )
{
	string str = &quot;Bitte geben Sie ein&quot; + Filler(a) + &quot; ein&quot;;

	cout &lt;&lt; str;

	while( !( cin &gt;&gt; a ) )
	{
		cin.clear();
		cin.ignore(numeric_limits&lt;streamsize&gt;::max(),'\n'); 
	    cout &lt;&lt; endl &lt;&lt; &quot;Fehlerhafte eingabe! &quot; &lt;&lt; endl &lt;&lt; str;
	}

	cin.ignore(numeric_limits&lt;streamsize&gt;::max(),'\n');
}

int main()
{    
	double	d = 0;
	char	c = 0;
	string  s ;
	
	bombensicher( d );
	cout &lt;&lt; d &lt;&lt; endl;
	
	bombensicher( c );
	cout &lt;&lt; c &lt;&lt; endl;
	
	bombensicher( s );
	cout &lt;&lt; s &lt;&lt; endl;

	return 0;
}
</code></pre>
</blockquote>
<p>Hi,</p>
<p>ich bin zwar nicht KasF und will auch nicht seine These in der Allgemeinheit stützen, aber das ist ein denkbar schlechtes &quot;Gegenbeispiel&quot;, weil hier die Typinformation sowieso schon zur Compilezeit aufgelöst wird ... dafür braucht man wirklich keine Runtime-Type-Information.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;limits&gt;
#include &lt;string&gt;
using namespace std;

string Filler(const string&amp; a) {
   return &quot;en String&quot;;
}

string Filler(const double&amp; a) {
   return &quot;e Fließkommazahl&quot;;
}

string Filler(const char&amp; a) {
   return &quot; Zeichen&quot;;
}

template&lt; typename T &gt;
void bombensicher( T &amp;a )
{
	string str = &quot;Bitte geben Sie ein&quot; + Filler(a) + &quot; ein&quot;;

	cout &lt;&lt; str;

	while( !( cin &gt;&gt; a ) )
	{
		cin.clear();
		cin.ignore(numeric_limits&lt;streamsize&gt;::max(),'\n'); 
	    cout &lt;&lt; endl &lt;&lt; &quot;Fehlerhafte eingabe! &quot; &lt;&lt; endl &lt;&lt; str;
	}

	cin.ignore(numeric_limits&lt;streamsize&gt;::max(),'\n');
}
</code></pre>
<p>... und ausgelinkt braucht das auch nicht mehr Platz (eher weniger) und läuft schnller als Deine template-Variante.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1306880</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1306880</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Fri, 15 Jun 2007 19:45:00 GMT</pubDate></item><item><title><![CDATA[Reply to [portable typeID] gibt es sowas? on Fri, 15 Jun 2007 19:43:01 GMT]]></title><description><![CDATA[<p>pale dog schrieb:</p>
<blockquote>
<p>ich hab' mal gehört, dass 'typeid' sehr schnell geht und konstante laufzeit hat, während 'dynamic_cast' die ganze vererbungshirarchie durchrödeln muss...</p>
</blockquote>
<p>typeid() selbst ist schnell, allerdings type_info::operator == ist nicht immer so super schnell (oft einfach als strcmp implementiert).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1306886</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1306886</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 15 Jun 2007 19:43:01 GMT</pubDate></item></channel></rss>