<?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[Templatetyp innerhalb von Methode festlegen]]></title><description><![CDATA[<p>Hey!</p>
<p>Ich habe eine Klasse, die einen void*-Pointer hat. Gleichzeitig gibt es eine Variable, die sich den zugehörigen Typen zum Pointer merkt, wenn z.B. der Pointer auf int zeigt steht in der Variablen sinngemäß &quot;INT&quot;. (Fragt bitte nicht wofür man so eine Klasse braucht).<br />
Nun will ich an den Wert herankommen, dies aber möglichst simpel halten.<br />
Eine GetVar()-Methode soll reichen, aber ich weiß nicht wie ich dem Compiler so etwas verkaufen könnte:</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
T GetVar()
{
	switch(GetType())
	{
		case INT:
		return(*static_cast&lt; const int* &gt;(m_pData)); 
		break;
	}
}
</code></pre>
<p>Und ich kann keine templateklasse aus der Klasse machen, weil ich sie sonst nicht in den stl-Containern verwalten kann <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>Muss ich jetzt wirklich für jeden Datentyp eine GetVarAsInt(), GetVarAsBool() usw. erstellen ? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /> ?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/141577/templatetyp-innerhalb-von-methode-festlegen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 31 Aug 2026 14:17:24 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/141577.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 23 Mar 2006 10:40:08 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Templatetyp innerhalb von Methode festlegen on Thu, 23 Mar 2006 10:40:08 GMT]]></title><description><![CDATA[<p>Hey!</p>
<p>Ich habe eine Klasse, die einen void*-Pointer hat. Gleichzeitig gibt es eine Variable, die sich den zugehörigen Typen zum Pointer merkt, wenn z.B. der Pointer auf int zeigt steht in der Variablen sinngemäß &quot;INT&quot;. (Fragt bitte nicht wofür man so eine Klasse braucht).<br />
Nun will ich an den Wert herankommen, dies aber möglichst simpel halten.<br />
Eine GetVar()-Methode soll reichen, aber ich weiß nicht wie ich dem Compiler so etwas verkaufen könnte:</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
T GetVar()
{
	switch(GetType())
	{
		case INT:
		return(*static_cast&lt; const int* &gt;(m_pData)); 
		break;
	}
}
</code></pre>
<p>Und ich kann keine templateklasse aus der Klasse machen, weil ich sie sonst nicht in den stl-Containern verwalten kann <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>Muss ich jetzt wirklich für jeden Datentyp eine GetVarAsInt(), GetVarAsBool() usw. erstellen ? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /> ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1022256</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1022256</guid><dc:creator><![CDATA[Immerkomplizierter]]></dc:creator><pubDate>Thu, 23 Mar 2006 10:40:08 GMT</pubDate></item><item><title><![CDATA[Reply to Templatetyp innerhalb von Methode festlegen on Thu, 23 Mar 2006 10:42:42 GMT]]></title><description><![CDATA[<p>Templates müssen zur Compilezeit wissen, welchen Typ sie gerade verwenden wollen. Wenn du den Typ zur Laufzeit ändern willst, benötigst du z.B. unions oder polymorphe Typen (Stichwort: Vererbung und virtuelle Methoden).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1022260</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1022260</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 23 Mar 2006 10:42:42 GMT</pubDate></item><item><title><![CDATA[Reply to Templatetyp innerhalb von Methode festlegen on Thu, 23 Mar 2006 10:57:17 GMT]]></title><description><![CDATA[<p>Wie wäre denn grob das Prinzip wenn ich das mit Vererbung machen würde?</p>
<p>Datentyp</p>
<p>und dann</p>
<p>Int : public Datentyp</p>
<p>und dann GetVar usw. überschreiben?</p>
<p>Und wie wäre das bei unions?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1022269</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1022269</guid><dc:creator><![CDATA[Immerkomplizierter]]></dc:creator><pubDate>Thu, 23 Mar 2006 10:57:17 GMT</pubDate></item><item><title><![CDATA[Reply to Templatetyp innerhalb von Methode festlegen on Thu, 23 Mar 2006 13:47:06 GMT]]></title><description><![CDATA[<p>Nach einschläger Recherche bin ich zu dem Ergebnis gekommen, dass die GetVar()-Methode nicht mit einer union realisiert werden kann.<br />
Zumindest wüsste ich nicht wie <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /> ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1022358</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1022358</guid><dc:creator><![CDATA[Immerkomplizierter]]></dc:creator><pubDate>Thu, 23 Mar 2006 13:47:06 GMT</pubDate></item><item><title><![CDATA[Reply to Templatetyp innerhalb von Methode festlegen on Thu, 23 Mar 2006 13:50:29 GMT]]></title><description><![CDATA[<p>Nimm <a href="http://www.boost.org/doc/html/any.html" rel="nofollow">boost::any</a> und erfinde das Rad nicht neu (dazu wäre deins schlechter :p).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1022361</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1022361</guid><dc:creator><![CDATA[Any]]></dc:creator><pubDate>Thu, 23 Mar 2006 13:50:29 GMT</pubDate></item><item><title><![CDATA[Reply to Templatetyp innerhalb von Methode festlegen on Fri, 24 Mar 2006 06:48:02 GMT]]></title><description><![CDATA[<p>Kann keine Third Party Libs benutzen. Dennoch Danke.</p>
<p>Nur nochmal für die Statistik: Man kann keine</p>
<pre><code class="language-cpp">union
</code></pre>
<p>zurückgeben nicht wahr?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1022748</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1022748</guid><dc:creator><![CDATA[Immerkomplizierter]]></dc:creator><pubDate>Fri, 24 Mar 2006 06:48:02 GMT</pubDate></item><item><title><![CDATA[Reply to Templatetyp innerhalb von Methode festlegen on Fri, 24 Mar 2006 07:18:36 GMT]]></title><description><![CDATA[<p>*nerv*</p>
<p>Es geht ja noch nicht einmal sowas hier:</p>
<pre><code class="language-cpp">template&lt;typename T&gt; 
			virtual T GetVar() = 0;
</code></pre>
<p>Also geht's auch nicht mit Polymorphismus. Na ja, dann gehts eben nicht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1022768</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1022768</guid><dc:creator><![CDATA[Immerkomplizierter]]></dc:creator><pubDate>Fri, 24 Mar 2006 07:18:36 GMT</pubDate></item><item><title><![CDATA[Reply to Templatetyp innerhalb von Methode festlegen on Fri, 24 Mar 2006 07:43:41 GMT]]></title><description><![CDATA[<p>virtual und template? Das dürfte sich irgendwie beißen <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="😉"
    /> (virtual bestimmt zur Laufzeit, welche Version einer bestimmten Methode aufgerufen wird (wahlweise &quot;int Base::GetVal()&quot; oder &quot;int Derived::GetVal()&quot;), templates werden zur Compilezeit ausgewertet)</p>
<p>Wenn du keine externe Bibliothek verwenden kannst (wer verbietet dir eigentlich boost?), mußt du dir wohl selber etwas vergleichbares bauen, z.B. so etwas:</p>
<pre><code class="language-cpp">template&lt;typename T1,typename T2&gt;
struct p_union
{
  bool typ;//true=T1,false=T2
  union
  {
    T1 val1;
    T2 val2;
  } val;
};

p_union&lt;int,double&gt; un;
...
if(un.typ)
{
  int i=un.val.val1;
  ...
}
else
{
  double d=un.val.val2;
  ...
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1022776</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1022776</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 24 Mar 2006 07:43:41 GMT</pubDate></item><item><title><![CDATA[Reply to Templatetyp innerhalb von Methode festlegen on Fri, 24 Mar 2006 07:53:57 GMT]]></title><description><![CDATA[<p>Und genau um dieses:</p>
<pre><code class="language-cpp">if(un.typ) 
{ 
  int i=un.val.val1; 
  ... 
} 
else 
{ 
  double d=un.val.val2; 
  ... 
}
</code></pre>
<p>geht es mir hier. Ich muss mir als weiterführender Programmierer anschauen, von welchem Typ die Struktur ist und dementsprechend die enthaltene Variable dem richtigen Typ zuweisen.<br />
Das geht, geht momentan auch mit meiner Methode, will ich aber irgendwie vermeiden. Mein Gedanke war, dass diese Struktur irgendwie eine einzelne GetVar() bekommt, und GetVar soll dann entscheiden welcher Typ enthalten ist und dann das richtige zurückliefern.</p>
<p>Nur scheint das wohl nicht zu gehen. <a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/10318">@CStoll</a>, wenn du (der ja mehr Erfahrung hat als ich <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="😉"
    /> ) mir jetzt sagst, dass das wirklich nicht geht, dann kann ich mir das weitere Grübeln auch sparen <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="🙂"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1022781</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1022781</guid><dc:creator><![CDATA[Immerkomplizierter]]></dc:creator><pubDate>Fri, 24 Mar 2006 07:53:57 GMT</pubDate></item><item><title><![CDATA[Reply to Templatetyp innerhalb von Methode festlegen on Fri, 24 Mar 2006 08:20:25 GMT]]></title><description><![CDATA[<p>Es geht nicht, daß sich der Rückgabetyp einer Funktion zur Laufzeit verändert - der wird einmal festgelegt und bleibt dann konstant. Du könntest höchstens den oben angegebenen p_union-Typ soweit aufpeppeln, daß er je nach Bedarf entweder als T1 oder T2 reagiert (indem du diese &quot;if(typ)...else...&quot;-Abfrage in die Zugriffmethoden reinziehst; es dürfte aber sehr schwer sein, alle benötigten Operationen dort unter einen Hut zu bekommen).</p>
<p>PS: Google mal nach &quot;Variant C++&quot; - da könntest du auch etwas für dich geeignetes finden <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/1022808</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1022808</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 24 Mar 2006 08:20:25 GMT</pubDate></item><item><title><![CDATA[Reply to Templatetyp innerhalb von Methode festlegen on Fri, 24 Mar 2006 08:56:14 GMT]]></title><description><![CDATA[<p>Manchmal hilft beim Verständnis ein Anwendungsbeispiel. Nehmen wir an, Du schaffst es, eine solche Klasse, nennen wir sie man Variant, zu schreiben, mit einer getValue-Methode mit Template-Rückgabewert. Die Anwendung wäre dann:</p>
<pre><code class="language-cpp">Variant v;
int i;

v.setValue(1);  // wir setzen das Ding auf int
i = v.getValue();  // ist ok

v.setValue(&quot;Hallo&quot;);   // jetzt ist es ein const char*
i = v.getValue();      // hier soll es aber einen Compile-Fehler ergeben???
</code></pre>
<p>Tommi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1022835</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1022835</guid><dc:creator><![CDATA[tntnet]]></dc:creator><pubDate>Fri, 24 Mar 2006 08:56:14 GMT</pubDate></item><item><title><![CDATA[Reply to Templatetyp innerhalb von Methode festlegen on Fri, 24 Mar 2006 09:23:17 GMT]]></title><description><![CDATA[<p>Ist zwar nicht als Rückgabewert aber auch nicht sonderlich umständlich:</p>
<pre><code class="language-cpp">class CVariant
{

public:

	enum EType
	{
		ET_NONE,
		ET_INT,
		ET_STRING,
	};

private:

	EType eType;
	union
	{
		int   i;
		char* c;
	} u;

public:

	inline CVariant()
	  : eType(ET_NONE)
	{
	}

	inline CVariant (int i)
	  : eType(ET_INT)
	{
		this-&gt;u.i = i;
	}

	inline CVariant (char* c)
	  : eType(ET_STRING)
	{
		this-&gt;u.c = c;
	}

	inline EType GetType() const
	{
		return this-&gt;eType;
	}

	bool Get (int&amp; i) const;
	bool Get (char*&amp; c) const;
	void Set (int i);
	void Set (char* c);
};

bool CVariant::Get
	(int&amp; i) const
{
	if (this-&gt;eType == ET_INT)
	{
		i = this-&gt;u.i;
		return true;
	}

	i = 0;
	return false;
}

bool CVariant::Get
	(char*&amp; c) const
{
	if (this-&gt;eType == ET_STRING)
	{
		c = this-&gt;u.c;
		return true;
	}

	c = 0;
	return false;
}

// die CVariant::Set kannst du dir denken
</code></pre>
<p>Ist aber schnell aus dem Arm geschüttelt und nicht getestet <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
<p>*edit* Noch die Aufrufe:</p>
<pre><code class="language-cpp">CVariant v (5);
int i;

if (v.Get (i))
	...; // v enthält ein int
else
	...; // v enthält kein int
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1022853</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1022853</guid><dc:creator><![CDATA[Neku]]></dc:creator><pubDate>Fri, 24 Mar 2006 09:23:17 GMT</pubDate></item><item><title><![CDATA[Reply to Templatetyp innerhalb von Methode festlegen on Fri, 24 Mar 2006 09:25:43 GMT]]></title><description><![CDATA[<p>Immerkomplizierter schrieb:</p>
<blockquote>
<p>Und ich kann keine templateklasse aus der Klasse machen, weil ich sie sonst nicht in den stl-Containern verwalten kann <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
</blockquote>
<p>hm, könnte es nicht sein, dass es folgendes ist, was Du suchst?</p>
<pre><code class="language-cpp">class VariantBase {
    public:
        VariantBase() {}
        virtual ~VariantBase() {}
        virtual void getValue() = 0;
};

template&lt;typename T&gt;
class Variant : public VariantBase {
    public:
        Variant(T value) : m_Value(value) {
        }
        virtual T getValue() {
            return m_Value;
        }
    private:
        T m_Value;
};
</code></pre>
<p>So kannst Du einen STL-Container erstellen, in dem Du diesen von der Basisklasse erstellst, die keine Templateklasse ist und durch die virtuelle getValue-Methode erhälst Du immer genau den richtigen Typ. Also z.B. so:</p>
<pre><code class="language-cpp">std::vector&lt;BaseVariant*&gt; vec;
vec.push_back( new Variant&lt;int&gt;(3) );
vec.push_back( new Variant&lt;double&gt;(3.41) );
...

// löschen nicht vergessen :)
for (int i = 0; i &lt; vec.size(); i++) {
      delete vec[i];
}
</code></pre>
<p>// Edit: zu langsam. <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="🙂"
    /><br />
obige Methode ist auch nicht schlecht. <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/1022864</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1022864</guid><dc:creator><![CDATA[mantiz]]></dc:creator><pubDate>Fri, 24 Mar 2006 09:25:43 GMT</pubDate></item><item><title><![CDATA[Reply to Templatetyp innerhalb von Methode festlegen on Fri, 24 Mar 2006 09:27:31 GMT]]></title><description><![CDATA[<p>Hm, wie holt man den Wert aus dieser Variant raus?</p>
<pre><code class="language-cpp">double d = vec[0]-&gt;getValue(); // ups, getValue ist void
</code></pre>
<p>Das:</p>
<pre><code class="language-cpp">if (Variant&lt;int&gt;* vint = dynamic_cast&lt;Variant&lt;int&gt;*&gt;(vec[0])) {
  int i = vint-&gt;getValue();
}
</code></pre>
<p>kanns ja irgendwie nicht sein <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/1022874</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1022874</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Fri, 24 Mar 2006 09:27:31 GMT</pubDate></item><item><title><![CDATA[Reply to Templatetyp innerhalb von Methode festlegen on Fri, 24 Mar 2006 09:59:03 GMT]]></title><description><![CDATA[<p>Hehe, ihr seid gut <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="😉"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /></p>
<p>Momentan arbeite ich an einer Lösung aus template und Vererbung. Die läuft auch, dazu noch die Getmethoden von Neku und ich hab das was ich wollte.</p>
<p>Klasse jungs <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_savoring_food"
      title=":yum:"
      alt="😋"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1022916</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1022916</guid><dc:creator><![CDATA[Immerkomplizierter]]></dc:creator><pubDate>Fri, 24 Mar 2006 09:59:03 GMT</pubDate></item><item><title><![CDATA[Reply to Templatetyp innerhalb von Methode festlegen on Fri, 24 Mar 2006 11:21:12 GMT]]></title><description><![CDATA[<p>Eleganter als die Neku-Variante wäre eine Template-Spezialisierung:</p>
<pre><code class="language-cpp">class Variant
{
  public:
    template &lt;typename T&gt;
      T getValue() const;       // keine Implementierung
    template &lt;&gt;
      int getValue&lt;int&gt;()
      {
        if (getType() != &quot;INT&quot;)
          throw std::runtime_error(&quot;falscher Typ&quot;);
        return was_auch_immer;
      }
    template &lt;&gt;
      int getValue&lt;std::string&gt;()
      {
        if (getType() != &quot;STRING&quot;)
          throw std::runtime_error(&quot;falscher Typ&quot;);
        return was_auch_immer;
      }

};

Variant v;
v = 4;
int i = v.getValue&lt;int&gt;();
double d = v.getValue&lt;double&gt;();  // compile-error - keine Template-Spezialisierung
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1022973</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1022973</guid><dc:creator><![CDATA[tntnet]]></dc:creator><pubDate>Fri, 24 Mar 2006 11:21:12 GMT</pubDate></item></channel></rss>