<?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[Optionales Template]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich würde gerne eine Klasse machen, die über ein optionales Template verfügt.</p>
<p>Beispiel:</p>
<pre><code class="language-cpp">template &lt;class T&gt;
class Knoten
{
Koordinate k;
T* anhaengsel;
};

Knoten&lt;int&gt; knotenInt;
Knoten&lt;&gt; knotenLeer;
</code></pre>
<p>Ich hoffe, was ich versuche, ist offensichtlich. Die Variable anhaengsel soll nur optional sein.</p>
<p>Ist das möglich?<br />
Wenn nicht, wie dann?</p>
<p>Danke für jede Hilfe! <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/306871/optionales-template</link><generator>RSS for Node</generator><lastBuildDate>Fri, 07 Aug 2026 03:42:06 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/306871.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 09 Aug 2012 14:56:51 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Optionales Template on Thu, 09 Aug 2012 14:57:21 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich würde gerne eine Klasse machen, die über ein optionales Template verfügt.</p>
<p>Beispiel:</p>
<pre><code class="language-cpp">template &lt;class T&gt;
class Knoten
{
Koordinate k;
T* anhaengsel;
};

Knoten&lt;int&gt; knotenInt;
Knoten&lt;&gt; knotenLeer;
</code></pre>
<p>Ich hoffe, was ich versuche, ist offensichtlich. Die Variable anhaengsel soll nur optional sein.</p>
<p>Ist das möglich?<br />
Wenn nicht, wie dann?</p>
<p>Danke für jede Hilfe! <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/2240428</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2240428</guid><dc:creator><![CDATA[ichbineinnoob]]></dc:creator><pubDate>Thu, 09 Aug 2012 14:57:21 GMT</pubDate></item><item><title><![CDATA[Reply to Optionales Template on Thu, 09 Aug 2012 14:57:45 GMT]]></title><description><![CDATA[<p>boost::optional?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2240429</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2240429</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Thu, 09 Aug 2012 14:57:45 GMT</pubDate></item><item><title><![CDATA[Reply to Optionales Template on Thu, 09 Aug 2012 14:59:07 GMT]]></title><description><![CDATA[<p>Kellerautomat schrieb:</p>
<blockquote>
<p>boost::optional?</p>
</blockquote>
<p>Hä watt?</p>
<p>Ein paar Worte mehr wären super <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/2240430</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2240430</guid><dc:creator><![CDATA[ichbineinnoob]]></dc:creator><pubDate>Thu, 09 Aug 2012 14:59:07 GMT</pubDate></item><item><title><![CDATA[Reply to Optionales Template on Thu, 09 Aug 2012 15:02:19 GMT]]></title><description><![CDATA[<p><a href="http://www.boost.org/doc/libs/1_50_0/libs/optional/doc/html/index.html" rel="nofollow">http://www.boost.org/doc/libs/1_50_0/libs/optional/doc/html/index.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2240431</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2240431</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Thu, 09 Aug 2012 15:02:19 GMT</pubDate></item><item><title><![CDATA[Reply to Optionales Template on Thu, 09 Aug 2012 15:04:32 GMT]]></title><description><![CDATA[<p>ichbineinnoob schrieb:</p>
<blockquote>
<pre><code class="language-cpp">template &lt;class T&gt;
class Knoten
{
Koordinate k;
T* anhaengsel;
};

Knoten&lt;int&gt; knotenInt;
Knoten&lt;&gt; knotenLeer;
</code></pre>
</blockquote>
<pre><code class="language-cpp">class Knoten
{
  Koordinate k;  
};

template &lt;class T&gt;
class KnotenMitAnhaengsel : public Knoten
{
  T * anhaengsel;
};

KnotenMitAnhaengsel&lt;int&gt; knotenInt;
Knoten knotenLeer;
</code></pre>
<p>?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2240432</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2240432</guid><dc:creator><![CDATA[Xin]]></dc:creator><pubDate>Thu, 09 Aug 2012 15:04:32 GMT</pubDate></item><item><title><![CDATA[Reply to Optionales Template on Thu, 09 Aug 2012 15:10:18 GMT]]></title><description><![CDATA[<p>Nein, keine abgeleitete Klasse.</p>
<p>1 Klasse mit 1 optionaler Template-Variable.</p>
<p>Das boost::optional Dingens verstehe ich nicht. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2240435</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2240435</guid><dc:creator><![CDATA[ichbineinnoob]]></dc:creator><pubDate>Thu, 09 Aug 2012 15:10:18 GMT</pubDate></item><item><title><![CDATA[Reply to Optionales Template on Thu, 09 Aug 2012 15:23:29 GMT]]></title><description><![CDATA[<p>Eine Spezialisierung geht:</p>
<pre><code class="language-cpp">template&lt;class T = void&gt; // Default void
class Knoten;

template&lt;&gt;
class Knoten&lt;void&gt; // Spezialisierung void ohne Anhängsel
{
    Koordinate k;
};

template&lt;class T&gt;
class Knoten // Default mit Anhängsel
{
    Koordinate k;
    T* anhaengsel;
};

Knoten&lt;float&gt; k1; // nimmt Default
Knoten&lt;&gt; k2; // nimmt void-Spezialisierung
</code></pre>
<p>(ungetestet)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2240440</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2240440</guid><dc:creator><![CDATA[ipsec]]></dc:creator><pubDate>Thu, 09 Aug 2012 15:23:29 GMT</pubDate></item><item><title><![CDATA[Reply to Optionales Template on Thu, 09 Aug 2012 15:25:45 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">struct none_t {};

template&lt;class T = none_t&gt;
struct Knoten
{
   Koordinate k;
   T* anhaengsel;
};

template&lt;&gt;
struct Knotwn&lt;none_t&gt;
{
   Koordinate k;
};
</code></pre>
<p>So vielleicht? Dir ist hoffentlich klar, dass Knoten&lt;&gt; und Knoten&lt;int&gt; zwei verschiedene Typen sind, die nix miteinander zu tun haben. Wahrscheinlich ist das dann mehr nach deinem Geschmack:</p>
<pre><code class="language-cpp">struct KnotenBase
{
   Koordinate k;

   virtual ~KnotenBase() {}
};

struct none_t {};

template&lt;class T = none_t&gt;
struct Knoten : KnotenBase
{
   T* anhaengsel;
};

template&lt;&gt;
struct Knoten&lt;none_t&gt; : KnotenBase
{
   // nix
};
</code></pre>
<p>Aber ich glaube, es wäre für Dich wahrscheinlich von Vorteil, wenn du erklärtest, was du damit bezwecken willst. Dann gibt's ggf. praktischeres Feedback.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2240443</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2240443</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Thu, 09 Aug 2012 15:25:45 GMT</pubDate></item><item><title><![CDATA[Reply to Optionales Template on Thu, 09 Aug 2012 15:38:11 GMT]]></title><description><![CDATA[<p>krümelkacker schrieb:</p>
<blockquote>
<p>Dir ist hoffentlich klar, dass Knoten&lt;&gt; und Knoten&lt;int&gt; zwei verschiedene Typen sind, die nix miteinander zu tun haben.</p>
</blockquote>
<p>Ach so. Nein, ist mir nicht klar.</p>
<p>Was ich bezwecken möchte? Ich möchte einen Graphen aufbauen und dafür je nach Verwendung verschiedene Knoten benutzen. Je nachdem wofür ich den Graphen brauche und welche Algorithmen ich abspielen möchte, brauche ich verschiedene Daten (Anhaengsel) in den Knoten.</p>
<p>Ich hatte jetzt an ein Dummy-Struct als normalen Knoten gedacht (also Knoten&lt;void&gt; o.ä.). Aber leere Klassen oder Strukturen lassen sich wohl nicht erzeugen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2240452</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2240452</guid><dc:creator><![CDATA[ichbineinnoob]]></dc:creator><pubDate>Thu, 09 Aug 2012 15:38:11 GMT</pubDate></item><item><title><![CDATA[Reply to Optionales Template on Thu, 09 Aug 2012 15:45:03 GMT]]></title><description><![CDATA[<p>ichbineinnoob schrieb:</p>
<blockquote>
<p>krümelkacker schrieb:</p>
<blockquote>
<p>Dir ist hoffentlich klar, dass Knoten&lt;&gt; und Knoten&lt;int&gt; zwei verschiedene Typen sind, die nix miteinander zu tun haben.</p>
</blockquote>
<p>Ach so. Nein, ist mir nicht klar.</p>
</blockquote>
<p>Dann ist es sinnvoll, die Gleichartigkeit (hier die Koordinaten) durch eine Basisklasse auszudrücken, bzw. wenn es nur die Koordinaten sind evtl. (falls sinnvoll) davon abzuleiten.</p>
<p>Eine Hierarchie kannst Du dann mit (Knoten <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="😉"
    /> ausdrücken, unabhängig davon, welcher Typ genau sich hinter (Knoten <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="😉"
    /> verbirgt.</p>
<p>ichbineinnoob schrieb:</p>
<blockquote>
<p>Was ich bezwecken möchte? Ich möchte einen Graphen aufbauen und dafür je nach Verwendung verschiedene Knoten benutzen. Je nachdem wofür ich den Graphen brauche und welche Algorithmen ich abspielen möchte, brauche ich verschiedene Daten (Anhaengsel) in den Knoten.</p>
</blockquote>
<p>Ist die Anzahl unterschiedlicher Typen begrenzt (z.B. 5 Stück), bzw. kannst eine sinnvolle Schnittstelle erstellen, die Du dann über virtuelle Funktionen rufen kannst?</p>
<p>ichbineinnoob schrieb:</p>
<blockquote>
<p>Ich hatte jetzt an ein Dummy-Struct als normalen Knoten gedacht (also Knoten&lt;void&gt; o.ä.). Aber leere Klassen oder Strukturen lassen sich wohl nicht erzeugen.</p>
</blockquote>
<p>Knoten&lt;&gt; war nicht leer, es enthielt Koordinaten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2240456</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2240456</guid><dc:creator><![CDATA[Xin]]></dc:creator><pubDate>Thu, 09 Aug 2012 15:45:03 GMT</pubDate></item><item><title><![CDATA[Reply to Optionales Template on Thu, 09 Aug 2012 15:58:05 GMT]]></title><description><![CDATA[<p>Xin schrieb:</p>
<blockquote>
<p>Knoten&lt;&gt; war nicht leer, es enthielt Koordinaten.</p>
</blockquote>
<p>Danke für die Antwort!</p>
<p>Ich meinte, ich wollte für das T* ein leeres struct {} üebrgeben. Aber das geht leider nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2240460</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2240460</guid><dc:creator><![CDATA[ichbineinnoob]]></dc:creator><pubDate>Thu, 09 Aug 2012 15:58:05 GMT</pubDate></item><item><title><![CDATA[Reply to Optionales Template on Thu, 09 Aug 2012 16:04:52 GMT]]></title><description><![CDATA[<p>ichbineinnoob schrieb:</p>
<blockquote>
<p>Xin schrieb:</p>
<blockquote>
<p>Knoten&lt;&gt; war nicht leer, es enthielt Koordinaten.</p>
</blockquote>
<p>Danke für die Antwort!</p>
<p>Ich meinte, ich wollte für das T* ein leeres struct {} üebrgeben. Aber das geht leider nicht.</p>
</blockquote>
<p>Das geht, aber das Ding muss einen Namen haben.</p>
<pre><code class="language-cpp">struct Leer
{};

Knoten&lt; struct Leer &gt; knoten;
</code></pre>
<p>Aber Sinn ergibt es keinen, denn ein (struct Leer <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="😉"
    /> ist genauso groß, wie jeder andere Zeiger, also kannst Du auch Knoten&lt; void &gt; nehmen.</p>
<p>Worauf hier vermutlich jeder hinaus will ist, dass Du eigentlich</p>
<pre><code class="language-cpp">class Knoten
{
public:
  Koordinate k;

  virtual void MaleDichAufBildschirm( Grafik &amp; g ) = 0;
};

class KnotenInt
  : public Knoten
{
public:  
  int Data;

  virtual MaleDichAufBildschirm( Grafik &amp; g )
  {
    /* Frickel das int in die Grafik */
  }
};

class KnotenString
  : public Knoten
{
public:  
  std::string Data;

  virtual MaleDichAufBildschirm( Grafik &amp; g )
  {
    /* Frickel den String in die Grafik */
  }
};
</code></pre>
<p>haben willst.</p>
<p>Alles können als (Knoten <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="😉"
    /> angesehen werden</p>
<pre><code class="language-cpp">Knoten * kInt = new KnotenInt();
Knoten * kString = new KnotenString();
</code></pre>
<p>und alle haben ein identisches Interface:</p>
<pre><code class="language-cpp">kInt-&gt;MaleDichAufBildschirm( g );
kString-&gt;MaleDichAufBildschirm( g );
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2240463</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2240463</guid><dc:creator><![CDATA[Xin]]></dc:creator><pubDate>Thu, 09 Aug 2012 16:04:52 GMT</pubDate></item><item><title><![CDATA[Reply to Optionales Template on Thu, 09 Aug 2012 21:34:40 GMT]]></title><description><![CDATA[<p>Eine Basisklasse + Template das von der Basisklasse ableitet und zusätzlich die Daten enthält sollte vollkommen ausreichend sein. Eine &quot;keine Daten&quot; Spezialisierung halte ich nicht für notwendig.<br />
Wenn man das braucht kann man ja einfach die Basisklasse direkt verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2240537</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2240537</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 09 Aug 2012 21:34:40 GMT</pubDate></item><item><title><![CDATA[Reply to Optionales Template on Sat, 11 Aug 2012 11:38:29 GMT]]></title><description><![CDATA[<p>Ich denke, ich habe die Lösung gefunden! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f4a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--light_bulb"
      title=":bulb:"
      alt="💡"
    /></p>
<pre><code class="language-cpp">class Knoten
{
Koordinate koordinate;
void* anhaengsel;
};
</code></pre>
<p>Die Variable &quot;anhaengsel&quot; wäre <em>optional</em> <strong>UND</strong> man könnte <em>jeden möglichen Typ</em> abspeichern.</p>
<p>Oder?? <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/2240968</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2240968</guid><dc:creator><![CDATA[ichbineinnoob]]></dc:creator><pubDate>Sat, 11 Aug 2012 11:38:29 GMT</pubDate></item><item><title><![CDATA[Reply to Optionales Template on Sat, 11 Aug 2012 12:37:30 GMT]]></title><description><![CDATA[<p>Mit void* würde ich nicht arbeiten, da das fehleranfällig ist.</p>
<p>Eine generische Graphenbibliothek zu schreiben, ist aber auch echt nicht einfach. Ich glaube aber, dass es das ist, was du machen willst. Ich würde da erst mal kleiner anfangen, statt gleich etwas zu kompliziertes basteln, was extrem vielseitig einsetzbar sein soll; denn das gibt's schon: Boost Graph Library.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2240978</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2240978</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Sat, 11 Aug 2012 12:37:30 GMT</pubDate></item></channel></rss>