<?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[Traits]]></title><description><![CDATA[<p>Hallo Leute,<br />
ich habe eine Frage zum Thema Traits. Ich verstehe einfach nicht wie das Funktionieren soll. Ich habe es versucht zwischen Pointer und keinem Pointer Type zu unterscheiden - klappt.</p>
<pre><code class="language-cpp">template&lt; typename T &gt;
class TypeInfo
{
public:
	TypeInfo( ) : isPtr( false )
	{
	}

	typedef T a_type;

	bool isPointer( )
	{
		return isPtr;
	}
private:
	bool isPtr;
};

template&lt; typename T &gt;
class TypeInfo&lt; T* &gt;
{
public:
	TypeInfo( ) : isPtr( true )
	{
	}

	bool isPointer( )
	{
		return isPtr;
	}

	typedef T* a_type;
private:
	bool isPtr;
};
</code></pre>
<p>Nun möchte ich mit Hilfe von einer Traits-Klasse eine zu dem Typ passende Funktion f aufrufen:</p>
<pre><code class="language-cpp">template &lt; typename T &gt;
void f( TypeInfo&lt; T &gt; )
{
}
</code></pre>
<p>Ab hier weiß ich nicht weiter... Ich weiß man könnte einfach die Funktion spezialisieren, das wollte ich jedoch über die TypeInfo machen. Ist mein Ansatz richtig? Wenn nicht, was machen ich falsch? Ich hoffe es ist so halbwegs verständlich was ich meine. Ich würde mich über eine Erklärung freuen.</p>
<p>MfG yihaaa</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/305482/traits</link><generator>RSS for Node</generator><lastBuildDate>Sat, 08 Aug 2026 20:09:27 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/305482.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 30 Jun 2012 10:03:33 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Traits on Sat, 30 Jun 2012 10:03:33 GMT]]></title><description><![CDATA[<p>Hallo Leute,<br />
ich habe eine Frage zum Thema Traits. Ich verstehe einfach nicht wie das Funktionieren soll. Ich habe es versucht zwischen Pointer und keinem Pointer Type zu unterscheiden - klappt.</p>
<pre><code class="language-cpp">template&lt; typename T &gt;
class TypeInfo
{
public:
	TypeInfo( ) : isPtr( false )
	{
	}

	typedef T a_type;

	bool isPointer( )
	{
		return isPtr;
	}
private:
	bool isPtr;
};

template&lt; typename T &gt;
class TypeInfo&lt; T* &gt;
{
public:
	TypeInfo( ) : isPtr( true )
	{
	}

	bool isPointer( )
	{
		return isPtr;
	}

	typedef T* a_type;
private:
	bool isPtr;
};
</code></pre>
<p>Nun möchte ich mit Hilfe von einer Traits-Klasse eine zu dem Typ passende Funktion f aufrufen:</p>
<pre><code class="language-cpp">template &lt; typename T &gt;
void f( TypeInfo&lt; T &gt; )
{
}
</code></pre>
<p>Ab hier weiß ich nicht weiter... Ich weiß man könnte einfach die Funktion spezialisieren, das wollte ich jedoch über die TypeInfo machen. Ist mein Ansatz richtig? Wenn nicht, was machen ich falsch? Ich hoffe es ist so halbwegs verständlich was ich meine. Ich würde mich über eine Erklärung freuen.</p>
<p>MfG yihaaa</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2228631</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228631</guid><dc:creator><![CDATA[yihaaa]]></dc:creator><pubDate>Sat, 30 Jun 2012 10:03:33 GMT</pubDate></item><item><title><![CDATA[Reply to Traits on Sat, 30 Jun 2012 12:27:50 GMT]]></title><description><![CDATA[<p>Dein TypeInfo ist falsch.</p>
<pre><code class="language-cpp">template&lt; typename T &gt;
class TypeInfo
{
public:
    enum { isPointer = 0 };
};

template&lt;typename T&gt;
class TypeInfo&lt;T*&gt; {
public:
    enum { isPointer = 1 };
};
</code></pre>
<p>dann kannst du checken ob ein Typ ein Zeiger ist:</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
void print_yes_if_t_is_ptr() {
   helper&lt;TypeInfo&lt;T&gt;::isPointer&gt;::print();
}

template&lt;bool B&gt;
class helper;

template&lt;&gt;
class helper&lt;true&gt; {
public:
   static void print() { cout&lt;&lt;&quot;yes\n&quot;; }
};

template&lt;&gt;
class helper&lt;false&gt; {
public:
   static void print() { cout&lt;&lt;&quot;no\n&quot;; }
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2228664</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228664</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Sat, 30 Jun 2012 12:27:50 GMT</pubDate></item><item><title><![CDATA[Reply to Traits on Sat, 30 Jun 2012 12:56:16 GMT]]></title><description><![CDATA[<p>Okay danke. Muss man also immer das Workaround gehen mit enum? Könnte man das auch mit const int machen?</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2228673</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228673</guid><dc:creator><![CDATA[yihaaa]]></dc:creator><pubDate>Sat, 30 Jun 2012 12:56:16 GMT</pubDate></item><item><title><![CDATA[Reply to Traits on Sat, 30 Jun 2012 13:22:33 GMT]]></title><description><![CDATA[<p>yihaaa schrieb:</p>
<blockquote>
<p>Okay danke. Muss man also immer das Workaround gehen mit enum? Könnte man das auch mit const int machen?</p>
</blockquote>
<p>enum oder static const int nimmt sich nicht viel.<br />
mit enum ists halt netter zu schreiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2228675</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228675</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Sat, 30 Jun 2012 13:22:33 GMT</pubDate></item></channel></rss>