<?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[Union Verständnisfrage]]></title><description><![CDATA[<p>Hi Leute,</p>
<p>also ich bin gerade das erste mal dabei ein Union zu nutzen. Allerdings hab ich da eine Verständnisfrage bezüglich der Unions.</p>
<p>1. Kann ich Typen mit eigentlich verschiedenen Größen einem Union hinzufügen (hab ich gesehen, sollte gehen). Bsp:</p>
<pre><code class="language-cpp">union myUnion{
  short   my_short;
  long    my_long;
};
</code></pre>
<p>2. Falls ja, ist das dann problemlos möglich so damit umzugehen:</p>
<pre><code class="language-cpp">void meine_funktion()
{
  short testShort = 3;
  myUnion testUnion;

  testUnion.my_short = testShort;
  testShort = (short)testUnion.my_short;
  //testShort == 3 ?
}
</code></pre>
<p>Also werden bei der letzten Zuweisung die richtigen 2 Bytes aus dem Union geholt, oder könnte das auf irgendeine Art &amp; Weise Probleme machen?</p>
<p>3. Angenommen ich habe eine Funktion die myUnion als Parameter besitzt, kann man einfach short oder long direkt übergeben ohne Fehler oder Warnings, oder muss gecastet werden? Bsp:</p>
<pre><code class="language-cpp">void meine_funktion(myUnion a_parameter)
{
  //tu was...
}

int main()
{
  short foobar = 5;
  meine_funktion(foobar);

  return 0;
}
</code></pre>
<p>Mir ist natürlich bewusst das die Funktion wissen muss welchen Typ sie behandelt damit es keine Probleme gibt!</p>
<p>So, denke diese Fragen kann man ganz flott beantworten. Hab gerade nicht die Möglichkeit das auszuprobieren, deswegen frage ich hier.</p>
<p>Danke schonmal für eure Antworten...</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/196078/union-verständnisfrage</link><generator>RSS for Node</generator><lastBuildDate>Wed, 30 Sep 2026 07:43:08 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/196078.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 25 Oct 2007 09:13:31 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Union Verständnisfrage on Thu, 25 Oct 2007 09:13:31 GMT]]></title><description><![CDATA[<p>Hi Leute,</p>
<p>also ich bin gerade das erste mal dabei ein Union zu nutzen. Allerdings hab ich da eine Verständnisfrage bezüglich der Unions.</p>
<p>1. Kann ich Typen mit eigentlich verschiedenen Größen einem Union hinzufügen (hab ich gesehen, sollte gehen). Bsp:</p>
<pre><code class="language-cpp">union myUnion{
  short   my_short;
  long    my_long;
};
</code></pre>
<p>2. Falls ja, ist das dann problemlos möglich so damit umzugehen:</p>
<pre><code class="language-cpp">void meine_funktion()
{
  short testShort = 3;
  myUnion testUnion;

  testUnion.my_short = testShort;
  testShort = (short)testUnion.my_short;
  //testShort == 3 ?
}
</code></pre>
<p>Also werden bei der letzten Zuweisung die richtigen 2 Bytes aus dem Union geholt, oder könnte das auf irgendeine Art &amp; Weise Probleme machen?</p>
<p>3. Angenommen ich habe eine Funktion die myUnion als Parameter besitzt, kann man einfach short oder long direkt übergeben ohne Fehler oder Warnings, oder muss gecastet werden? Bsp:</p>
<pre><code class="language-cpp">void meine_funktion(myUnion a_parameter)
{
  //tu was...
}

int main()
{
  short foobar = 5;
  meine_funktion(foobar);

  return 0;
}
</code></pre>
<p>Mir ist natürlich bewusst das die Funktion wissen muss welchen Typ sie behandelt damit es keine Probleme gibt!</p>
<p>So, denke diese Fragen kann man ganz flott beantworten. Hab gerade nicht die Möglichkeit das auszuprobieren, deswegen frage ich hier.</p>
<p>Danke schonmal für eure Antworten...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1391685</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1391685</guid><dc:creator><![CDATA[Tobias W]]></dc:creator><pubDate>Thu, 25 Oct 2007 09:13:31 GMT</pubDate></item><item><title><![CDATA[Reply to Union Verständnisfrage on Thu, 25 Oct 2007 09:16:50 GMT]]></title><description><![CDATA[<p>casten brauchst du nicht und wenn du was in testUnion.my_short reinschreibst, kannst du es von da auch fehlerfrei wieder auslesen, sonst würde das ganze ja keinen Sinn machen <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="🤡"
    /> Und das als Parameter, weiß nicht obs geht, aber wie du schon gesagt hast, toll ist das nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1391691</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1391691</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Thu, 25 Oct 2007 09:16:50 GMT</pubDate></item><item><title><![CDATA[Reply to Union Verständnisfrage on Thu, 25 Oct 2007 09:39:14 GMT]]></title><description><![CDATA[<ol>
<li>
<p>Ja, geht - du kannst alle primitiven Datentypen<sup>*</sup> übereinander in die union legen (deren Gesamtgröße ist dann das Maximum der Member-Größen - bei deiner Beispiel-union also sizeof(long)).</p>
</li>
<li>
<p>Solange du immer mit dem &quot;aktiven&quot; Member (das letzte Element, dem du etwas zugewiesen hast) der union arbeitest, ist der Daten-Inhalt definiert - und da ist auch kein Cast notwendig für den Zugriff.</p>
</li>
</ol>
<p>Probleme könnte es jedoch machen, wenn du wild zwischen den Membern wechselst:</p>
<pre><code class="language-cpp">myUnion tester;
tester.my_short = 4711;//genauer 4711h - aber die Umwandlung übernimmt der Compiler für dich

cout&lt;&lt;tester.my_short;//problemlos - liefert 4711
cout&lt;&lt;tester.my_long;//undefiniert
short output=tester.my_long;//ebenfalls undefiniert
</code></pre>
<ol start="3">
<li>Nein, das geht nicht - außer du spendiest der union entsprechende Umwandlungs-Konstruktoren (ja, in C++ dürfen auch unions Methoden haben).</li>
</ol>
<p><sup>*</sup> die einzige Bedingung an die Typen ist, daß es PODs sind - d.h. sie dürfen keine selbstdefinierten Konstruktoren, Destruktoren oder Zuweisungsoperatoren und nur POD-Elemente haben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1391705</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1391705</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 25 Oct 2007 09:39:14 GMT</pubDate></item><item><title><![CDATA[Reply to Union Verständnisfrage on Thu, 25 Oct 2007 10:24:40 GMT]]></title><description><![CDATA[<blockquote>
<p>Probleme könnte es jedoch machen, wenn du wild zwischen den Membern wechselst:</p>
</blockquote>
<p>Eigentlich ist das aber einer der features der union.<br />
Ich setz unions eigentlich ein, um casts zu vermeiden und wenn die daten soweiso in ne eigene variable mit belieben typ muessen.</p>
<p>Beispiel, du willst nen double in nen long long &quot;interpretieren&quot; also auf byteebene, nicht mit den normalen umwandlungsvorschriften. Wenn man den reinterpretcast vermeiden will, nimmt man halt nen union ...</p>
<p>Ansonsten kann man unions gut umgehen in dem man direkt auf byteebene arbeitet. Was uebersichtlicher ist, haengt meist vom Anwendungsfall ab.</p>
<p>Manchmal sind unions schick, manchmal kommt man mit bytearrays und gecasteten daten besser, besonders wenn die daten komplexer sind.</p>
<p>Ciao ....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1391722</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1391722</guid><dc:creator><![CDATA[RHBaum]]></dc:creator><pubDate>Thu, 25 Oct 2007 10:24:40 GMT</pubDate></item><item><title><![CDATA[Reply to Union Verständnisfrage on Thu, 25 Oct 2007 10:31:40 GMT]]></title><description><![CDATA[<blockquote>
<p>Eigentlich ist das aber einer der features der union.</p>
</blockquote>
<p>Nein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1391732</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1391732</guid><dc:creator><![CDATA[...]]></dc:creator><pubDate>Thu, 25 Oct 2007 10:31:40 GMT</pubDate></item><item><title><![CDATA[Reply to Union Verständnisfrage on Thu, 25 Oct 2007 10:37:22 GMT]]></title><description><![CDATA[<p>RHBaum schrieb:</p>
<blockquote>
<blockquote>
<p>Probleme könnte es jedoch machen, wenn du wild zwischen den Membern wechselst:</p>
</blockquote>
<p>Eigentlich ist das aber einer der features der union.</p>
</blockquote>
<p>Ist es nicht - was passiert, wenn du auf das &quot;falsche&quot; Element zugreifen willst, ist Glückssache. Der Hauptvorteil der union ist, daß sie kompakter ist.</p>
<blockquote>
<p>Ich setz unions eigentlich ein, um casts zu vermeiden und wenn die daten soweiso in ne eigene variable mit belieben typ muessen.</p>
<p>Beispiel, du willst nen double in nen long long &quot;interpretieren&quot; also auf byteebene, nicht mit den normalen umwandlungsvorschriften. Wenn man den reinterpretcast vermeiden will, nimmt man halt nen union ...</p>
</blockquote>
<p>Ja - reinterpret_cast&lt;&gt; ist genauso unsicher wie der Weg über die union. Aber solche Umwandlungen auf Bit-Ebene (egal ob über union oder reinterpret_cast&lt;&gt;) solltest du auf Notfälle beschränken.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1391738</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1391738</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 25 Oct 2007 10:37:22 GMT</pubDate></item><item><title><![CDATA[Reply to Union Verständnisfrage on Thu, 25 Oct 2007 11:18:14 GMT]]></title><description><![CDATA[<p>Mein Problem ist eben, dass ich vom &quot;Benutzer&quot; mehrere Daten verschiedener Standarddatentypen übergeben bekomme. Diese will ich in einer Liste bzw. Map verwalten.</p>
<p>Über Templates dürfte das ja nicht gehen, da hier auch immer nur eine Templateklasse eines Datentyps in die Maps kommen darf.</p>
<p>Deshalb dachte ich mir ich stecke die nötigen Datentypen in ein Union rein, und übergebe mir gleichzeitig den Typ als Bytestruct mit. So arbeite ich auf dem &quot;richtigen&quot; bzw. &quot;aktiven&quot; Element, und hab eine Möglichkeit alles in einer Map zu verwalten.</p>
<p>Bin aber für alle Vorschläge offen. Vielleicht seh ich auch gerade den Wald vor lauter Bäumen nicht <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/1391768</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1391768</guid><dc:creator><![CDATA[Tobias W]]></dc:creator><pubDate>Thu, 25 Oct 2007 11:18:14 GMT</pubDate></item><item><title><![CDATA[Reply to Union Verständnisfrage on Thu, 25 Oct 2007 11:22:03 GMT]]></title><description><![CDATA[<p>Tobias W schrieb:</p>
<blockquote>
<p>Deshalb dachte ich mir ich stecke die nötigen Datentypen in ein Union rein, und übergebe mir gleichzeitig den Typ als Bytestruct mit. So arbeite ich auf dem &quot;richtigen&quot; bzw. &quot;aktiven&quot; Element, und hab eine Möglichkeit alles in einer Map zu verwalten.</p>
</blockquote>
<p>Wie gesagt - solange du weißt, was der aktive Member ist, sollte es da keine Probleme geben (aber im Ernstfall meterlange Fallunterscheidungen - und die sind nicht gerade einfach zu warten).</p>
<p>Wenn du alle ankommenden Daten einheitlich verarbeiten willst, solltest du es mal mit Polymorphie versuchen - eine abstrakte Basisklasse deklariert alle erforderlichen Zugriffsmethoden (pur virtuell), die Datenklassen leiten davon ab und implementieren diese Methoden. Und deine &quot;Liste bzw. Map&quot; speichert Pointer auf diese Elemente.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1391774</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1391774</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 25 Oct 2007 11:22:03 GMT</pubDate></item><item><title><![CDATA[Reply to Union Verständnisfrage on Thu, 25 Oct 2007 11:26:49 GMT]]></title><description><![CDATA[<p>Genau, das wäre die andere Möglichkeit. Dann hab ich im gegensatz zu langen Fallunterscheidungen, x verschiedene Klassen die alle das selbe tun.</p>
<p>Allerdings hätte man dann auch die Möglichkeit nicht nur Standarddatentypen nutzen zu können sondern, falls zukünftig erforderlich, auch weitere Strukturen und Klassen mit zu verarbeiten...</p>
<p>Ich glaube ich hab mich entschieden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1391780</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1391780</guid><dc:creator><![CDATA[Tobias W]]></dc:creator><pubDate>Thu, 25 Oct 2007 11:26:49 GMT</pubDate></item><item><title><![CDATA[Reply to Union Verständnisfrage on Thu, 25 Oct 2007 11:29:36 GMT]]></title><description><![CDATA[<p>Tobias W schrieb:</p>
<blockquote>
<p>Genau, das wäre die andere Möglichkeit. Dann hab ich im gegensatz zu langen Fallunterscheidungen, x verschiedene Klassen die alle das selbe tun.</p>
</blockquote>
<p>Nicht unbedingt - schließlich unterscheiden sich ja die Daten, mit denen die einzelnen Klassen zu tun haben. Und wenn du doch überall das selbe machen willst, kannst du ja Polymorphie und Templates kombinieren:</p>
<pre><code class="language-cpp">class DataBase
{
  ...
}

template&lt;typename T&gt;
class Data : public DataBase
{
  ...
}

std::map&lt;std::string,DataBase*&gt; sorted_data;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1391783</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1391783</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 25 Oct 2007 11:29:36 GMT</pubDate></item><item><title><![CDATA[Reply to Union Verständnisfrage on Thu, 25 Oct 2007 11:34:26 GMT]]></title><description><![CDATA[<p>Tobias W schrieb:</p>
<blockquote>
<p>...vom &quot;Benutzer&quot; mehrere Daten verschiedener Standarddatentypen übergeben bekomme. ...</p>
</blockquote>
<p>Klingt nach &quot;Laufzeit&quot;.</p>
<p>Tobias W schrieb:</p>
<blockquote>
<p>...Templates ...</p>
</blockquote>
<p>Ist &quot;Compilezeit&quot;.<br />
=&gt; Der &quot;Typwahlmechanismus von Templates&quot; ist ungeeignet dafür.<br />
Aaaaaber: Sie können Dir trotzdem eine Menge Tipparbeit ersparen, wenn es für alle/viele Typen gemeinsame Bearbeitungsmethoden gibt.<br />
Aber sie kannst Du eben erst da einsetzen, wo Du bereits (über einen anderen Mechanismus) den Typen bestimmt hast.</p>
<p>Ich würde auch für Laufzeit-Polymorphie via virtual plädieren (und spätestens da kannst Du dann evtl. auch templates einsetzen).</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1391786</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1391786</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Thu, 25 Oct 2007 11:34:26 GMT</pubDate></item><item><title><![CDATA[Reply to Union Verständnisfrage on Thu, 25 Oct 2007 11:56:10 GMT]]></title><description><![CDATA[<p>Du meinst sowas:</p>
<pre><code class="language-cpp">struct AllData 
{
  char datatype_;
  union {
    int i;
    long l;
    float f;
    bool b;
    char c;
    double d;
    /*...*/
  } data_;
};

typedef std::deque&lt;AllData&gt; Datalist;

std::ostream&amp; operator&lt;&lt;(std::ostream&amp; os, AllData&amp; const data) {
  switch (data.datatype_) {
    case 'i': os &lt;&lt; data.data_.i; break;
    case 'l': os &lt;&lt; data.data_.l; break;
    case 'c': os &lt;&lt; data.data_.c; break;
    case 'd': os &lt;&lt; data.data_.d; break;
    case 'b': os &lt;&lt; data.data_.b; break;
    /* ect... */
  }
  return os;
}
</code></pre>
<p>Das kann man so machen, oder man kanns ueber polymorphie machen:</p>
<pre><code class="language-cpp">class basic_data 
{
   /* ... */
private:
  friend std::ostream&amp; operator&lt;&lt; (std::ostream&amp; os, basic_data&amp; const data) {
    return data.print(os);
  }
  virtual std::ostream&amp; print(std::ostream&amp; os) const = 0;
};

template &lt;typename T&gt; 
class dataholder : public basic_data 
{
  T data;
private:
  std::ostream&amp; print(std::ostream&amp; os) {
    os &lt;&lt; data; return os;
  }
}

typedef std::deque&lt;basic_data*&gt; Datalist;
</code></pre>
<p>Bei der Polymorphie kann man natuerlich nichtmehr die Objekte selbst in die Container packen sonder nur Zeiger darauf.</p>
<p>/edit: natuerlich wieder zu lang gebraucht <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>/edit2: ja, templates sind compiletime abhaengig. Allerdings sind die switch-cases das auch, die man nutzt, um in der union-variante auf die Daten zuzugreifen, bzw. die man nutzen muss, um in der polymorphen variante via dynamic_cast an die Daten zu kommen. Folgende Ergaenzungen (nicht getestet und evtl nicht ganz ausgereift) sind mir noch zur template-polymorphen variante eingefallen:</p>
<pre><code class="language-cpp">class basic_data 
{
  /*...*/
  template&lt;typename T&gt;
  static basic_data* wrap_data(T&amp; const t) {
    return new dataholder&lt;T&gt; (t);  //entsprechender Ctor fuer dataholder ist trivial
  }

  template&lt;typename T&gt;
  T* unwrap_data() {
    dataholder&lt;T&gt;* pt = dynamic_cast&lt;dataholder&lt;T&gt;*&gt; (this);
    return pt ? &amp;(pt-&gt;data) : NULL;
  }

};

/edit3: ich weiss, man kann die methoden nicht alle innerhalb der Klassendefinition definieren weil zykl;ische Abhaengigkeiten bestehen, deshalb muss die iMplementierung hintenangestellt werden. und der Zugriff &amp;(pt-&gt;data ) sollte evtl auch durhc ne methode von dataholder gekapselt werden, falls da was spezialisiert werden soll...
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1391790</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1391790</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 25 Oct 2007 11:56:10 GMT</pubDate></item><item><title><![CDATA[Reply to Union Verständnisfrage on Thu, 25 Oct 2007 11:51:01 GMT]]></title><description><![CDATA[<p>@ CStoll &amp; pumuckl:<br />
Hm, ich hätte jetzt eiskalt behauptet das man eine Templateklasse nicht von einer &quot;normalen&quot; ableiten kann. Ich hatte in der Richtung nämlich mal Probleme die sich alle aufgelöst haben, als ich die Basisklasse auch zur Templateklasse gemacht habe.</p>
<p>Muss ich gleich mal ausprobieren...</p>
<p>Edit:<br />
Geht, komisch, was hab ich damals nur gemacht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1391795</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1391795</guid><dc:creator><![CDATA[Tobias W]]></dc:creator><pubDate>Thu, 25 Oct 2007 11:51:01 GMT</pubDate></item><item><title><![CDATA[Reply to Union Verständnisfrage on Thu, 25 Oct 2007 11:59:21 GMT]]></title><description><![CDATA[<p>Klar kannst du eine Template-Klasse von einer &quot;reinen&quot; Klasse ableiten (siehe zum Beispiel in der Standard-Bibliothek ios_base und basic_ios&lt;&gt;). Nur mußt du bei den geerbten Methoden die korrekte Signatur beachten (kannst also keine Typen verwenden, die auf dem Template-Parameter basieren).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1391807</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1391807</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 25 Oct 2007 11:59:21 GMT</pubDate></item><item><title><![CDATA[Reply to Union Verständnisfrage on Thu, 25 Oct 2007 14:28:07 GMT]]></title><description><![CDATA[<p>Ok, nur bin ich jetzt bei dieser Methode auf einen weiteren Stolperstein gestoßen:</p>
<p>Meine abstrakte BaseClass soll die DerivedClass &quot;zwingen&quot; den Operator kleiner (&lt;) und größer (&gt;) zu implementieren. Doch die DerivedClass ist eine Templateklasse, und in der BaseClass habe ich somit den typename T der in den Operatoren übergeben wird nicht.</p>
<p>Um mich verständlicher auszudrücken, hier ein Beispiel:</p>
<pre><code class="language-cpp">class BaseClass
{
public:
  virtual bool operator&lt;(const /*???*/&amp; parameter) const =0;
};

template &lt;class T&gt;
class DerivedClass : public BaseClass
{
public:
  bool operator&lt;(const T&amp; parameter) const;
};
</code></pre>
<p>Ich hab meine Frage im Quellcode mit ??? dokumentiert. Mir fehlt dort ja der Typ des Parameters, weil die BaseClass kein Template ist (und auch nicht sein soll!). Ich will nur sichergehen, dass die abgeleitete Klasse den Operator implementiert.</p>
<p>Hat wer eine Idee? <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/1391925</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1391925</guid><dc:creator><![CDATA[Tobias W]]></dc:creator><pubDate>Thu, 25 Oct 2007 14:28:07 GMT</pubDate></item><item><title><![CDATA[Reply to Union Verständnisfrage on Thu, 25 Oct 2007 14:20:49 GMT]]></title><description><![CDATA[<p>Afaik kannst du die abgeleiteten Klassen fast zu nichts &quot;zwingen&quot; - außer daß sie die abstrakten Methoden implementieren müssen. (aber bei den abstrakten Methoden sind die abgeleiteten Klassen an das Interface der Basisklasse gebunden). d.h. du könntest höchstens den Vergleichsoperator abstakt definieren (bzw. eine abstrakte Hilfsfunktion nutzen), damit ihn alle abgeleiteten Klassen umsetzen müssen:</p>
<pre><code class="language-cpp">class base
{
public:
  virtual bool operator&lt;(const base&amp; other) const = 0;
};

template&lt;typename T&gt;
class derived
{
public:
  derived(const T&amp; value);
  virtual bool operator&lt;(const base&amp; other) const
  {
    derived* theOther = dynamic_cast&lt;derived*&gt;(&amp;other);
    if(theOther==NULL)
      return false;
    //vergleiche
  }
};
</code></pre>
<p>(wobei - ich würde eher eine Hilfsmethode verwenden, die von den verschiedenen Vergleichsoperatoren genutzt wird)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1391938</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1391938</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 25 Oct 2007 14:20:49 GMT</pubDate></item><item><title><![CDATA[Reply to Union Verständnisfrage on Thu, 25 Oct 2007 14:36:25 GMT]]></title><description><![CDATA[<p>Gute Idee, aber schön wäre es natürlich ohne Umstände (also ohne dynamic_cast).</p>
<p>Außerdem ist mir gerade aufgefallen das ich da viel zu kompliziert rangehe:<br />
Im Prinzip will ich nur feststellen, ob der &quot;Value&quot; in den Abgeleiteten Klassen in gewissen Grenzen liegt. Diese Grenzen stehen auch in der abgeleiteten Klasse. Also muss ich ja nicht unbedingt die Operatoren überladen, sondern schreibe eine extra Funktion dafür die jeder implementieren kann wie er will.</p>
<p>Also wie du schon sagst: eine Hilfsfunktion (was hier auch viel sinnvoller ist <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="🙄"
    /> ). Vielen Dank, damit hat sich das Problem erledigt...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1391953</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1391953</guid><dc:creator><![CDATA[Tobias W]]></dc:creator><pubDate>Thu, 25 Oct 2007 14:36:25 GMT</pubDate></item></channel></rss>