<?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[&amp;lt;solved&amp;gt; Template Klasse mit versch. Member-Typen]]></title><description><![CDATA[<p>Ich zerbreche mir gerade den Kopf über ein Template-Problem. Folgende Ausgangslage:</p>
<p>Ich habe unterschiedlichste Datentypen und muss ein Interface bauen welches einige dieser Datentypen kapselt und unter einem Pointer zur Verfügung stellt. Beispiel:</p>
<pre><code>struct myStruct{
    int a;
    float b;
}
</code></pre>
<p>Nun weiß ich aber nicht ob <em>a</em> ein <em>int</em> wird oder vielleicht doch ein <em>const char</em>* und b ein <em>float</em> oder gar ein <em>myFancyClassInstance</em>.<br />
Die erste Idee ist natürlich daraus ein Template zu machen, aber da fängt der Ärger an. Wie kann ich zwei (oder mehr) Member eines Objekts von unbekanntem Typ deklarieren?<br />
Mein Ansatz ist:</p>
<pre><code>template &lt;class T, class U&gt;
class CEntity&lt;T, U&gt; {
public:
	CEntity(){}
	~CEntity(){}

	// entity
	T* getNode(){ return this-&gt;entity; }
	void setNode(T *entity) { this-&gt;entity = entity; }

	__declspec(property(get = getNode, put = setNode)) T *node;

private:
	T *entity;
	U *entityExtra;
};
</code></pre>
<p>Dieses Konstrukt kompiliert problemlos, aber wie verwende ich es? Folgendes funktioniert schon mal nicht:</p>
<pre><code>CEntity&lt;ICameraSceneNode, CCameraExtra&gt; *entity = new CEntity&lt;ICameraSceneNode, CCameraExtra&gt;;
</code></pre>
<p>Für Schubser in die richtige Richtung wäre ich wahnsinnig dankbar. <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/topic/338660/lt-solved-gt-template-klasse-mit-versch-member-typen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 13 Apr 2026 08:58:27 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/338660.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 30 Jun 2016 16:13:05 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to &amp;lt;solved&amp;gt; Template Klasse mit versch. Member-Typen on Thu, 30 Jun 2016 16:47:21 GMT]]></title><description><![CDATA[<p>Ich zerbreche mir gerade den Kopf über ein Template-Problem. Folgende Ausgangslage:</p>
<p>Ich habe unterschiedlichste Datentypen und muss ein Interface bauen welches einige dieser Datentypen kapselt und unter einem Pointer zur Verfügung stellt. Beispiel:</p>
<pre><code>struct myStruct{
    int a;
    float b;
}
</code></pre>
<p>Nun weiß ich aber nicht ob <em>a</em> ein <em>int</em> wird oder vielleicht doch ein <em>const char</em>* und b ein <em>float</em> oder gar ein <em>myFancyClassInstance</em>.<br />
Die erste Idee ist natürlich daraus ein Template zu machen, aber da fängt der Ärger an. Wie kann ich zwei (oder mehr) Member eines Objekts von unbekanntem Typ deklarieren?<br />
Mein Ansatz ist:</p>
<pre><code>template &lt;class T, class U&gt;
class CEntity&lt;T, U&gt; {
public:
	CEntity(){}
	~CEntity(){}

	// entity
	T* getNode(){ return this-&gt;entity; }
	void setNode(T *entity) { this-&gt;entity = entity; }

	__declspec(property(get = getNode, put = setNode)) T *node;

private:
	T *entity;
	U *entityExtra;
};
</code></pre>
<p>Dieses Konstrukt kompiliert problemlos, aber wie verwende ich es? Folgendes funktioniert schon mal nicht:</p>
<pre><code>CEntity&lt;ICameraSceneNode, CCameraExtra&gt; *entity = new CEntity&lt;ICameraSceneNode, CCameraExtra&gt;;
</code></pre>
<p>Für Schubser in die richtige Richtung wäre ich wahnsinnig dankbar. <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/2500646</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2500646</guid><dc:creator><![CDATA[Farbfinsternis]]></dc:creator><pubDate>Thu, 30 Jun 2016 16:47:21 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;lt;solved&amp;gt; Template Klasse mit versch. Member-Typen on Thu, 30 Jun 2016 16:47:01 GMT]]></title><description><![CDATA[<p>Wie das immer so ist. Sechs Stunden daran herum denken, ins Forum posten und dann selbst drauf kommen. Bei</p>
<pre><code>class CEntity&lt;T, U&gt;
</code></pre>
<p>muss natürlich das</p>
<pre><code>&lt;T, U&gt;
</code></pre>
<p>weg, dann funktioniert alles wie es soll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2500653</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2500653</guid><dc:creator><![CDATA[Farbfinsternis]]></dc:creator><pubDate>Thu, 30 Jun 2016 16:47:01 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;lt;solved&amp;gt; Template Klasse mit versch. Member-Typen on Thu, 30 Jun 2016 17:51:21 GMT]]></title><description><![CDATA[<p>Was ist denn</p>
<pre><code>__declspec(property(get = getNode, put = setNode)
</code></pre>
<p>Für eine Extension? Und was macht das?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2500657</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2500657</guid><dc:creator><![CDATA[JulianH]]></dc:creator><pubDate>Thu, 30 Jun 2016 17:51:21 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;lt;solved&amp;gt; Template Klasse mit versch. Member-Typen on Thu, 30 Jun 2016 18:20:36 GMT]]></title><description><![CDATA[<p>das ist eine Visual Studio Extension. Sie bewirkt dass man auf Methoden wie auf public member zugreifen kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2500664</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2500664</guid><dc:creator><![CDATA[Farbfinsternis]]></dc:creator><pubDate>Thu, 30 Jun 2016 18:20:36 GMT</pubDate></item></channel></rss>