<?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[Typeid().name() und Templates]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>gehe ich richig davon aus, dass ich in einem Template das bspw. so aussieht:</p>
<pre><code>template &lt;class FooBar&gt;
void templateFunction()
{
    std::cout &lt;&lt; typeid(Foobar).name() &lt;&lt; std::endl;
}

int main()
{
    templateFunction&lt;meineKlasse&gt;();
    return 0;
}
</code></pre>
<p>mittels typeid().name() den Typ/Klasse des Templates ermitteln kann?<br />
Ich frage deshalb, da ich bei der Ausgabe noch etwas mehr als nur das erwartete Ergebnis bekomme.</p>
<pre><code>9meineKlasse
</code></pre>
<p>Ich versteh nicht wirklich was die 9 zu bedeuten hat. Ich frage daher, weil ich in OpenFOAM gerade eine neue thermodynamik Datenbank einbinden muss und das Grundgerüst erstmal verstehen muss. Nachdem ich die Klassen durch hab und die Templates durchgeschaut habe, müsste ich nämlich folgendes bei der oben genannten Ausgabe bekommen: psiThermo</p>
<p>Ich erhalte aber</p>
<pre><code>N4Foam9psiThermoE
</code></pre>
<p>Das ist ja schon mal gar nicht schlecht, nur ich versteh nicht wirklich was die anderen Dinge zu bedeuten haben. Anmerkungen sind herzlichst willkommen.</p>
<p>Grüße und ein schönes Wochenende an alle.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/329262/typeid-name-und-templates</link><generator>RSS for Node</generator><lastBuildDate>Sat, 30 May 2026 18:04:44 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/329262.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 14 Nov 2014 15:46:50 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Typeid().name() und Templates on Fri, 14 Nov 2014 15:46:50 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>gehe ich richig davon aus, dass ich in einem Template das bspw. so aussieht:</p>
<pre><code>template &lt;class FooBar&gt;
void templateFunction()
{
    std::cout &lt;&lt; typeid(Foobar).name() &lt;&lt; std::endl;
}

int main()
{
    templateFunction&lt;meineKlasse&gt;();
    return 0;
}
</code></pre>
<p>mittels typeid().name() den Typ/Klasse des Templates ermitteln kann?<br />
Ich frage deshalb, da ich bei der Ausgabe noch etwas mehr als nur das erwartete Ergebnis bekomme.</p>
<pre><code>9meineKlasse
</code></pre>
<p>Ich versteh nicht wirklich was die 9 zu bedeuten hat. Ich frage daher, weil ich in OpenFOAM gerade eine neue thermodynamik Datenbank einbinden muss und das Grundgerüst erstmal verstehen muss. Nachdem ich die Klassen durch hab und die Templates durchgeschaut habe, müsste ich nämlich folgendes bei der oben genannten Ausgabe bekommen: psiThermo</p>
<p>Ich erhalte aber</p>
<pre><code>N4Foam9psiThermoE
</code></pre>
<p>Das ist ja schon mal gar nicht schlecht, nur ich versteh nicht wirklich was die anderen Dinge zu bedeuten haben. Anmerkungen sind herzlichst willkommen.</p>
<p>Grüße und ein schönes Wochenende an alle.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2427649</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2427649</guid><dc:creator><![CDATA[Shor-ty]]></dc:creator><pubDate>Fri, 14 Nov 2014 15:46:50 GMT</pubDate></item><item><title><![CDATA[Reply to Typeid().name() und Templates on Fri, 14 Nov 2014 16:00:23 GMT]]></title><description><![CDATA[<p>Das gibt unter den meisten Compilern der sog. mangled name.<br />
Der ist notwendig um bspw. verschiedene Funktionsoverloads einen eindeutigen Namen zu geben. Der wird von irgendeinem Algorithmus erstellt und ist nicht dazu gedacht sonderlich lesbar zu sein.<br />
Um an einen lesbaren Namen zu kommen musst du ihn demanglen, das ist ebenfalls Compiler abhängig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2427653</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2427653</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Fri, 14 Nov 2014 16:00:23 GMT</pubDate></item><item><title><![CDATA[Reply to Typeid().name() und Templates on Fri, 14 Nov 2014 16:03:58 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>danke für die Info.<br />
Könnte es sein das es folgendermaßen ist:</p>
<p>N -&gt; Namespace<br />
4 -&gt; Anzahl der Ziffern des Namespacenamens (Foam)<br />
Foam -&gt; Namespacename<br />
9 -&gt; Anzahl der Ziffern des Typs im Template<br />
psiThermo -&gt; Typ des Templates.</p>
<p>Wäre zumindest sehr logisch. Danke noch für deine Info.<br />
Werde mir das mal anschauen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2427654</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2427654</guid><dc:creator><![CDATA[Shor-ty]]></dc:creator><pubDate>Fri, 14 Nov 2014 16:03:58 GMT</pubDate></item><item><title><![CDATA[Reply to Typeid().name() und Templates on Fri, 14 Nov 2014 18:44:35 GMT]]></title><description><![CDATA[<p>es gibt auch boost/type_index</p>
<pre><code>#include &lt;boost/type_index.hpp&gt;

template &lt;typename T&gt;
void Test()
{
    std::cout &lt;&lt; boost::typeindex::type_id_with_cvr&lt;T&gt;().pretty_name(); // pretty!
}
</code></pre>
<p>Demangling mit dem g++ (gnu compiler collection) (und ich glaube auch clang):</p>
<pre><code>#include &lt;cxxabi&gt;

template &lt;typename T&gt;
void printDemangled()
{
    static const char buffer[1 &lt;&lt; 10]; // evtl größer wählen
    int bufferSize = sizeof(buffer);
    memset(buffer, '\0'. bufferSize);
    int status = 0;
    abi::__cxa_demangle(typeid(T).name(), buffer, &amp;bufferSize, &amp;status);
    // ich ignoriere hier status einfach mal und geh davon aus dass alles gut ging.
    std::cout &lt;&lt; buffer;
}
</code></pre>
<p>Diese &quot;Lösung&quot; hier ist aber unvöllständig, da typeid dir nicht alle infos liefert.<br />
Deshalb oben mit boost::typeindex &quot;with_cvr&quot; (const, volatile, reference) für alle Informationen.<br />
Das ließe sich nat. mit type_traits lösen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2427675</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2427675</guid><dc:creator><![CDATA[5cript]]></dc:creator><pubDate>Fri, 14 Nov 2014 18:44:35 GMT</pubDate></item></channel></rss>