<?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[Vergleich von Objekten]]></title><description><![CDATA[<p>Vielleicht habe ich nicht lange genug gesucht, aber sowohl im Forum als auch in Google fand ich nichts zum vergleich von Objekten mithilfe STL</p>
<p>Ungefähr so möchte ich das haben</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
bool compare(T objekt_1, T objekt_2);
</code></pre>
<p>Und so möchte ich es nutzen:</p>
<pre><code class="language-cpp">class MyClass
{
protected:

    int someInteger;
    bool someBool;

public:

    MyClass(int value)
    {
        MyClass::someInteger = value;
        MyClass::someBool = true;
    }
}

int main(void)
{
    bool result;

    // create two objects of class «MyClass»
    MyClass object1(2);
    MyClass object2(7);

    // compare objects 1 &amp; 2
    result = compare&lt;MyClass&gt;(object1, object2);

    // result should be = false, cause the object are different

    // create another two objects of class «MyClass»
    MyClass object3(5);
    MyClass object4(5);

    // compare objects 3 &amp; 4
    result = compare&lt;MyClass&gt;(object3, object4);

    // result should now be = true, cause the object are now equal
}
</code></pre>
<p>Gibt es überhaupt eine Möglichkeit ein solches Konstrukt zu realisieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/308618/vergleich-von-objekten</link><generator>RSS for Node</generator><lastBuildDate>Wed, 05 Aug 2026 18:05:39 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/308618.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 30 Sep 2012 14:57:28 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Vergleich von Objekten on Sun, 30 Sep 2012 14:57:28 GMT]]></title><description><![CDATA[<p>Vielleicht habe ich nicht lange genug gesucht, aber sowohl im Forum als auch in Google fand ich nichts zum vergleich von Objekten mithilfe STL</p>
<p>Ungefähr so möchte ich das haben</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
bool compare(T objekt_1, T objekt_2);
</code></pre>
<p>Und so möchte ich es nutzen:</p>
<pre><code class="language-cpp">class MyClass
{
protected:

    int someInteger;
    bool someBool;

public:

    MyClass(int value)
    {
        MyClass::someInteger = value;
        MyClass::someBool = true;
    }
}

int main(void)
{
    bool result;

    // create two objects of class «MyClass»
    MyClass object1(2);
    MyClass object2(7);

    // compare objects 1 &amp; 2
    result = compare&lt;MyClass&gt;(object1, object2);

    // result should be = false, cause the object are different

    // create another two objects of class «MyClass»
    MyClass object3(5);
    MyClass object4(5);

    // compare objects 3 &amp; 4
    result = compare&lt;MyClass&gt;(object3, object4);

    // result should now be = true, cause the object are now equal
}
</code></pre>
<p>Gibt es überhaupt eine Möglichkeit ein solches Konstrukt zu realisieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2255795</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2255795</guid><dc:creator><![CDATA[RussianTux]]></dc:creator><pubDate>Sun, 30 Sep 2012 14:57:28 GMT</pubDate></item><item><title><![CDATA[Reply to Vergleich von Objekten on Sun, 30 Sep 2012 15:01:03 GMT]]></title><description><![CDATA[<p><code>operator==</code> ?<br />
<code>std::equal_to</code> ?<br />
Ich weiß nicht so genau, was du dir vorstellst und wieso du diese Lösungen nicht nutzt/gefunden hast.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2255796</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2255796</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 30 Sep 2012 15:01:03 GMT</pubDate></item><item><title><![CDATA[Reply to Vergleich von Objekten on Sun, 30 Sep 2012 15:00:10 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>normalerweise überschreibt man dafür einfach den operator==</p>
<pre><code class="language-cpp">bool operator==(const MyClass&amp; lhs, const MyClass&amp; rhs)
{
    return lhs.GetInteger() == rhs.GetInteger();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2255797</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2255797</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Sun, 30 Sep 2012 15:00:10 GMT</pubDate></item><item><title><![CDATA[Reply to Vergleich von Objekten on Sun, 30 Sep 2012 15:27:37 GMT]]></title><description><![CDATA[<p>Ja klar, dafür überlädt man den Vergleichsoperator, aber was wenn ich Objekte vergleichen möchte die ich in keinem Fall manipulieren kann, heißt dass ich MyClass zwar instanzieren, aber keinesfalls umschreiben kann, ich kann also keine Klassenoperatorüberladung beschreiben, muss aber die instanzierten Objekte irgendwie vergleichen, sind sie nun identisch oder nicht..</p>
<p>wenn nicht mit STL, wie wäre es dann möglich?</p>
<p>P.S. möglicherweise eine Art Binärvergleich dieser Objekte?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2255803</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2255803</guid><dc:creator><![CDATA[RussianTux]]></dc:creator><pubDate>Sun, 30 Sep 2012 15:27:37 GMT</pubDate></item><item><title><![CDATA[Reply to Vergleich von Objekten on Sun, 30 Sep 2012 15:27:46 GMT]]></title><description><![CDATA[<p>RussianTux schrieb:</p>
<blockquote>
<p>Ja klar, dafür überlädt man den Vergleichsoperator, aber was wenn ich Objekte vergleichen möchte die ich in keinem Fall manipulieren kann, heißt dass ich MyClass zwar instanzieren, aber keinesfalls umschreiben kann, ich kann also keine Klassenoperatorüberladung beschreiben, muss aber die instanzierten Objekte irgendwie vergleichen, sind sie nun identisch oder nicht..</p>
<p>wenn nicht mit STL, wie wäre es dann möglich?</p>
</blockquote>
<p>Dann musst du die entsprechenden Funktionen eben const-qualifizieren. Oder was meinst du?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2255805</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2255805</guid><dc:creator><![CDATA[out]]></dc:creator><pubDate>Sun, 30 Sep 2012 15:27:46 GMT</pubDate></item><item><title><![CDATA[Reply to Vergleich von Objekten on Sun, 30 Sep 2012 15:31:43 GMT]]></title><description><![CDATA[<p>out schrieb:</p>
<blockquote>
<p>RussianTux schrieb:</p>
<blockquote>
<p>Ja klar, dafür überlädt man den Vergleichsoperator, aber was wenn ich Objekte vergleichen möchte die ich in keinem Fall manipulieren kann, heißt dass ich MyClass zwar instanzieren, aber keinesfalls umschreiben kann, ich kann also keine Klassenoperatorüberladung beschreiben, muss aber die instanzierten Objekte irgendwie vergleichen, sind sie nun identisch oder nicht..</p>
<p>wenn nicht mit STL, wie wäre es dann möglich?</p>
</blockquote>
<p>Dann musst du die entsprechenden Funktionen eben const-qualifizieren. Oder was meinst du?</p>
</blockquote>
<p>Hmm wie meinst du das? Beispiel?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2255809</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2255809</guid><dc:creator><![CDATA[RussianTux]]></dc:creator><pubDate>Sun, 30 Sep 2012 15:31:43 GMT</pubDate></item><item><title><![CDATA[Reply to Vergleich von Objekten on Sun, 30 Sep 2012 15:39:47 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">class MyClass
{
	private:
		int i;
	public:
		MyClass(int i) : i(i) {}
		int GetInteger() const
		{
			return i;
		}
};

bool operator==(const MyClass&amp; lhs, const MyClass&amp; rhs)
{
    return lhs.GetInteger() == rhs.GetInteger();
} 

int main()
{
	const MyClass is_const(2);
	MyClass is_not_const(4);

	if( is_const==is_const );
	if( is_not_const==is_not_const );
	if( is_not_const==is_const);
}
</code></pre>
<p>Wo ist das Problem?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2255810</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2255810</guid><dc:creator><![CDATA[out]]></dc:creator><pubDate>Sun, 30 Sep 2012 15:39:47 GMT</pubDate></item><item><title><![CDATA[Reply to Vergleich von Objekten on Sun, 30 Sep 2012 15:50:49 GMT]]></title><description><![CDATA[<p>out schrieb:</p>
<blockquote>
<pre><code class="language-cpp">class MyClass
{
	private:
		int i;
	public:
		MyClass(int i) : i(i) {}
		int GetInteger() const
		{
			return i;
		}
};

bool operator==(const MyClass&amp; lhs, const MyClass&amp; rhs)
{
    return lhs.GetInteger() == rhs.GetInteger();
} 

int main()
{
	const MyClass is_const(2);
	MyClass is_not_const(4);

	if( is_const==is_const );
	if( is_not_const==is_not_const );
	if( is_not_const==is_const);
}
</code></pre>
<p>Wo ist das Problem?</p>
</blockquote>
<p>Das Problem habe ich oben bereits erwähnt, ich kann die Klasse nicht manipulieren, muss aber 2 Instanzen dieser Klasse auf Gleichheit vergleichen.<br />
Außerdem kann anstelle dieser Klasse eine komplett andere stehen, die Instanzen welcher man auch vergleich können muss:</p>
<pre><code class="language-cpp">bool result;

SomeClass object1;
SomeClass object2;

result = compare&lt;SomeClass&gt;(object1, object2);

int object3;
int object4;

result = compare&lt;int&gt;(object3, object4);

AnotherClass object5;
AnotherClass object6;

result = compare&lt;AnotherClass&gt;(object5, object6);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2255816</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2255816</guid><dc:creator><![CDATA[RussianTux]]></dc:creator><pubDate>Sun, 30 Sep 2012 15:50:49 GMT</pubDate></item><item><title><![CDATA[Reply to Vergleich von Objekten on Sun, 30 Sep 2012 16:05:51 GMT]]></title><description><![CDATA[<p>Wieso sollte man denn überhaupt noch operator== überladen, wenn es die ultimative Vergleichsfunktion gäbe, die alles mit jedem vergleichen kann?</p>
<p>Man schreibt operator== für jede Klasse neu, es gibt nicht einfach eine Funktion, die das, was Du willst, übernimmt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2255820</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2255820</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Sun, 30 Sep 2012 16:05:51 GMT</pubDate></item><item><title><![CDATA[Reply to Vergleich von Objekten on Sun, 30 Sep 2012 16:07:37 GMT]]></title><description><![CDATA[<p>Ok, also diese Klasse</p>
<pre><code class="language-cpp">class MyClass
{
protected:

    int someInteger;
    bool someBool;

public:

    MyClass(int value)
    {
        MyClass::someInteger = value;
        MyClass::someBool = true;
    }
}
</code></pre>
<p>ist fix und kann nicht geändert werden. Dann kommst du von außen auch nicht an die Attribute. D.h. du kannst zwei Instanzen diese Klasse nicht auf Gleichheit überprüfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2255821</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2255821</guid><dc:creator><![CDATA[out]]></dc:creator><pubDate>Sun, 30 Sep 2012 16:07:37 GMT</pubDate></item><item><title><![CDATA[Reply to Vergleich von Objekten on Sun, 30 Sep 2012 16:08:01 GMT]]></title><description><![CDATA[<p>Eisflamme schrieb:</p>
<blockquote>
<p>Wieso sollte man denn überhaupt noch operator== überladen, wenn es die ultimative Vergleichsfunktion gäbe, die alles mit jedem vergleichen kann?</p>
<p>Man schreibt operator== für jede Klasse neu, es gibt nicht einfach eine Funktion, die das, was Du willst, übernimmt.</p>
</blockquote>
<p>Wenn es diese nicht gibt, wie wäre es möglich eine Funktion für diesen Fall der Anwendung zu schreiben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2255822</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2255822</guid><dc:creator><![CDATA[RussianTux]]></dc:creator><pubDate>Sun, 30 Sep 2012 16:08:01 GMT</pubDate></item><item><title><![CDATA[Reply to Vergleich von Objekten on Sun, 30 Sep 2012 16:15:06 GMT]]></title><description><![CDATA[<p>Für welchen Fall denn? Deinen Fall habe ich eben verstanden als &quot;ich will eine Funktion, die alles kann&quot;. Diesen kannst Du nicht lösen. Außer vielleicht mit memcmp.</p>
<p>Wenn Du eine Klasse hast, deren Schnittstelle und Implementation Du nicht verändern kannst, dann kannst Du für diese Klasse einen globalen operator== gleich schreiben. Dieser muss aber auf die Attribute, welche als Vergleichskriterien dienen können, zugreifen können (z.B. über Getter), ansonsten ist kein Vergleich möglich, wie out es schon beschrieben hat.</p>
<p>Diese globale Vergleichsfunktion habe ich beispielhaft ja in meinem ersten Post implementiert. Das ist Zusatzcode, der nicht in der Klasse stehen muss.</p>
<p>Edit:<br />
Übrigens liegt ein Teil der Verwirrung der Antwortenden an deiner Formulierung, ich gehe Mal kurz drauf ein:</p>
<blockquote>
<p>Ja klar, dafür überlädt man den Vergleichsoperator, aber was wenn ich Objekte vergleichen möchte die ich in keinem Fall manipulieren kann,</p>
</blockquote>
<p>Objekte sind Instanzen. Wenn Du die nicht manipulieren kannst, heißt das, dass sie const sind, d.h. dass du deren Attribute nicht verändern kannst. Das meinst Du aber anscheinend nicht.</p>
<blockquote>
<p>heißt dass ich MyClass zwar instanzieren, aber keinesfalls umschreiben kann,</p>
</blockquote>
<p>Okay, also die Klasse ändern (manipulieren ist unüblich, das versteht man nicht sofort; umschreiben ist okay).</p>
<blockquote>
<p>ich kann also keine Klassenoperatorüberladung beschreiben,</p>
</blockquote>
<p>Auch komisch formuliert. Du kannst innerhalb der Klasse keine Operatoren überladen.</p>
<p>Kleinigkeiten, aber wenn das alles korrekt beschrieben ist, kommt man schneller zu einer Lösung. Nur für die (nahe) Zukunft. <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/2255823</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2255823</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Sun, 30 Sep 2012 16:15:06 GMT</pubDate></item><item><title><![CDATA[Reply to Vergleich von Objekten on Sun, 30 Sep 2012 16:24:13 GMT]]></title><description><![CDATA[<p>Ok, du könntest z.B. das machen:</p>
<pre><code class="language-cpp">class MyClass
{
protected:

    int someInteger;
    bool someBool;

public:

    MyClass(int value)
    {
        MyClass::someInteger = value;
        MyClass::someBool = true;
    }
};

class MyClass_Modified : private MyClass
{
public:
    MyClass_Modified(int value) : MyClass(value) {}
	int GetInteger() const
    {
		return someInteger;
    } 
};
bool operator==(const MyClass_Modified&amp; lhs, const MyClass_Modified&amp; rhs)
{
    return lhs.GetInteger() == rhs.GetInteger();
}

int main()
{
    const MyClass_Modified is_const(2);
    MyClass_Modified is_not_const(4);

    if( is_const==is_const );
    if( is_not_const==is_not_const );
    if( is_not_const==is_const);
}
</code></pre>
<p>Eine ultimative compare-Funktion bekommst du trotzdem nicht hin. Du kannst ja nicht davon aussgehen, dass jede Klasse dieselben Attribute hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2255832</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2255832</guid><dc:creator><![CDATA[out]]></dc:creator><pubDate>Sun, 30 Sep 2012 16:24:13 GMT</pubDate></item><item><title><![CDATA[Reply to Vergleich von Objekten on Sun, 30 Sep 2012 17:16:21 GMT]]></title><description><![CDATA[<p>Eisflamme schrieb:</p>
<blockquote>
<p>Für welchen Fall denn? Deinen Fall habe ich eben verstanden als &quot;ich will eine Funktion, die alles kann&quot;. Diesen kannst Du nicht lösen. Außer vielleicht mit memcmp.</p>
</blockquote>
<p><code>memcmp</code> wäre undefiniertes Verhalten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2255844</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2255844</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Sun, 30 Sep 2012 17:16:21 GMT</pubDate></item><item><title><![CDATA[Reply to Vergleich von Objekten on Sun, 30 Sep 2012 17:24:47 GMT]]></title><description><![CDATA[<p>TyRoXx schrieb:</p>
<blockquote>
<p><code>memcmp</code> wäre undefiniertes Verhalten.</p>
</blockquote>
<p>Nicht immer. Vielleicht kennt er ja die Klasseninterna und weiß, dass ein memcmp in Ordnung wäre. Außerdem wäre nicht das Verhalten von memcmp an sich undefiniert, sondern höchstens, ob das Ergebnis irgendetwas mit Gleichheit im üblichen Sinne zu tun hat oder nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2255848</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2255848</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 30 Sep 2012 17:24:47 GMT</pubDate></item><item><title><![CDATA[Reply to Vergleich von Objekten on Sun, 30 Sep 2012 17:47:53 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">template &lt;typename T&gt;
bool equalObjects(T object_1, T object_2)
{
	if (memcmp(&amp;object_1, &amp;object_2, sizeof(T)) == 0) {
		return true;
	} else {
		return false;
	}
}
</code></pre>
<p>no comment</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2255853</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2255853</guid><dc:creator><![CDATA[RussianTux]]></dc:creator><pubDate>Sun, 30 Sep 2012 17:47:53 GMT</pubDate></item><item><title><![CDATA[Reply to Vergleich von Objekten on Sun, 30 Sep 2012 18:03:34 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>TyRoXx schrieb:</p>
<blockquote>
<p><code>memcmp</code> wäre undefiniertes Verhalten.</p>
</blockquote>
<p>Nicht immer. Vielleicht kennt er ja die Klasseninterna und weiß, dass ein memcmp in Ordnung wäre. Außerdem wäre nicht das Verhalten von memcmp an sich undefiniert, sondern höchstens, ob das Ergebnis irgendetwas mit Gleichheit im üblichen Sinne zu tun hat oder nicht.</p>
</blockquote>
<p>Ich finde keinen Nachweis, aber der Zugriff auf <code>private</code> s eines Objektes riecht nach undefined behaviour.<br />
Das Ergebnis von <code>memcmp</code> auf Strukturen jeglicher Art ist mindestens implementation-defined, weil das Layout im Speicher nicht vorgegeben ist.</p>
<p>Welchen Sinn soll es eigentlich haben, Objekte anhand nicht-zugänglicher Eigenschaften zu vergleichen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2255857</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2255857</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Sun, 30 Sep 2012 18:03:34 GMT</pubDate></item><item><title><![CDATA[Reply to Vergleich von Objekten on Sun, 30 Sep 2012 18:15:59 GMT]]></title><description><![CDATA[<p>RussianTux schrieb:</p>
<blockquote>
<pre><code class="language-cpp">template &lt;typename T&gt;
bool equalObjects(T object_1, T object_2)
{
	if (memcmp(&amp;object_1, &amp;object_2, sizeof(T)) == 0) {
		return true;
	} else {
		return false;
	}
}
</code></pre>
<p>no comment</p>
</blockquote>
<p>Es gibt natürlich wieder ein Problem bezüglich memcmp, es führt keine &quot;deep comparison&quot; aus, wenn das Object als pointer in sich trägt, die auf Daten zeigen , welche man auch vergleichen möchte, dann funktioniert das memcmp-Konstrukt nicht.</p>
<p>Es wird stets ein &quot;not equal&quot; werfen, weil nicht mal die pointer adressen gleich sind...</p>
<p>Ich habe hier noch eine weitere Idee auf Lager: Serialisierung und Vergleich des streams... aber wäre eine tiefe Serialisierung überhaupt möglich?</p>
<p>was sagt ihr dazu?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2255859</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2255859</guid><dc:creator><![CDATA[RussianTux]]></dc:creator><pubDate>Sun, 30 Sep 2012 18:15:59 GMT</pubDate></item><item><title><![CDATA[Reply to Vergleich von Objekten on Sun, 30 Sep 2012 18:28:28 GMT]]></title><description><![CDATA[<p>RussianTux schrieb:</p>
<blockquote>
<pre><code class="language-cpp">template &lt;typename T&gt;
bool equalObjects(T object_1, T object_2)
{
	if (memcmp(&amp;object_1, &amp;object_2, sizeof(T)) == 0) {
		return true;
	} else {
		return false;
	}
}
</code></pre>
<p>no comment</p>
</blockquote>
<p>Was das für ein Hack. <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>
<p><a href="http://www.codepolice.org/c/memcmp.html" rel="nofollow">http://www.codepolice.org/c/memcmp.html</a><br />
<a href="http://rxwen.blogspot.de/2009/12/use-memcmp-to-compare-objects.html" rel="nofollow">http://rxwen.blogspot.de/2009/12/use-memcmp-to-compare-objects.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2255864</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2255864</guid><dc:creator><![CDATA[out]]></dc:creator><pubDate>Sun, 30 Sep 2012 18:28:28 GMT</pubDate></item><item><title><![CDATA[Reply to Vergleich von Objekten on Sun, 30 Sep 2012 18:32:59 GMT]]></title><description><![CDATA[<blockquote>
<p>was sagt ihr dazu?</p>
</blockquote>
<p>Wieso wir? Ich habe bisher von keinem gelesen, der so eine Universallösung will. Nur du möchtest aus ungenannten Gründen so etwas haben.</p>
<p>Ich sehe auch keinen wirklichen Sinn darin. Klassen können einen operator== anbieten, wenn es Sinn macht. Das hat auch den Vorteil, dass die Identität eines Objektes gleich mitbestimmt wird. Wenn kein operator== vorhanden ist, macht es evtl. auch keinen Sinn einen Vergleich durchzuführen (bzw. gibt es dann keine Standard-Vergleichskriterien). Dann würdest Du ohne genaue Kenntnis der Klasse einen Vergleichsoperator nutzen, dessen Ergebnis Du überhaupt nicht einschätzen könntest.</p>
<p>Wenn ich Klassen nutze, die keinen operator== anbieten und ich einen will, beschäftige ich mich genau mit der Klasse und schreibe einen. Das ist auch nicht weniger Arbeit als mich genau mit der Klasse zu beschäftigen und den Universal-operator== zu benutzen.</p>
<p>Erklär doch lieber Mal, wofür Du so etwas brauchst. Mir scheint, dass das mehr ein Gedankenexperiment ist, als dass es einen tatsächlichen Anwendungsfall gibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2255867</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2255867</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Sun, 30 Sep 2012 18:32:59 GMT</pubDate></item><item><title><![CDATA[Reply to Vergleich von Objekten on Sun, 30 Sep 2012 19:01:05 GMT]]></title><description><![CDATA[<p>Eisflamme schrieb:</p>
<blockquote>
<blockquote>
<p>was sagt ihr dazu?</p>
</blockquote>
<p>Wieso wir? Ich habe bisher von keinem gelesen, der so eine Universallösung will. Nur du möchtest aus ungenannten Gründen so etwas haben.</p>
<p>Ich sehe auch keinen wirklichen Sinn darin. Klassen können einen operator== anbieten, wenn es Sinn macht. Das hat auch den Vorteil, dass die Identität eines Objektes gleich mitbestimmt wird. Wenn kein operator== vorhanden ist, macht es evtl. auch keinen Sinn einen Vergleich durchzuführen (bzw. gibt es dann keine Standard-Vergleichskriterien). Dann würdest Du ohne genaue Kenntnis der Klasse einen Vergleichsoperator nutzen, dessen Ergebnis Du überhaupt nicht einschätzen könntest.</p>
<p>Wenn ich Klassen nutze, die keinen operator== anbieten und ich einen will, beschäftige ich mich genau mit der Klasse und schreibe einen. Das ist auch nicht weniger Arbeit als mich genau mit der Klasse zu beschäftigen und den Universal-operator== zu benutzen.</p>
<p>Erklär doch lieber Mal, wofür Du so etwas brauchst. Mir scheint, dass das mehr ein Gedankenexperiment ist, als dass es einen tatsächlichen Anwendungsfall gibt.</p>
</blockquote>
<p>Der Sinn hinter der ganzen Sache ist eine Art UnitTest...</p>
<p>es gibt ein zu erwartendes Objekt (expected) und ein erhaltenes Objekt (received):</p>
<pre><code class="language-cpp">int expected = 5;
int received = funciton_add(2,3);

if (compare&lt;int&gt;(expected, received) == true) {
    // result = success
} else {
    // result = failed
}
</code></pre>
<p>Anstelle des int könnte eine ganz andere Klasse stehen, trotzdem sollte der Test herausfinden, ob das resultat der funktion positiv war, also das zu erwartende und das bekommene objekt übereinstimmen</p>
<pre><code class="language-cpp">bool result;

MyClass expected = blubberblah;
MyClass received = doSomething();

result = compare&lt;MyClass&gt;(expected, received)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2255873</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2255873</guid><dc:creator><![CDATA[RussianTux]]></dc:creator><pubDate>Sun, 30 Sep 2012 19:01:05 GMT</pubDate></item><item><title><![CDATA[Reply to Vergleich von Objekten on Sun, 30 Sep 2012 19:18:41 GMT]]></title><description><![CDATA[<p>RussianTux schrieb:</p>
<blockquote>
<p>Anstelle des int könnte eine ganz andere Klasse stehen, trotzdem sollte der Test herausfinden, ob das resultat der funktion positiv war, also das zu erwartende und das bekommene objekt übereinstimmen</p>
</blockquote>
<p>Tja, du kannst aber nichts testen, was die Klasse gar nicht kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2255878</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2255878</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Sun, 30 Sep 2012 19:18:41 GMT</pubDate></item><item><title><![CDATA[Reply to Vergleich von Objekten on Sun, 30 Sep 2012 20:31:21 GMT]]></title><description><![CDATA[<p>Na dann mach doch einfach:</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
bool compare(const T&amp; lhs, const T&amp; rhs)
{
    return lhs == rhs;
} // hierfür eine Funktion zu machen, macht wenig Sinn, weil Du das einfach dort einbetten kannst, wo du die Abfrage machen willst...
// dennoch schlage ich vor einfach darauf zu vertrauen, dass operator== da ist
</code></pre>
<p>und sorge gleichzeitig dafür, dass von jeder Klasse, die für Deine Unit-Tests zur Verfügung stehen soll, Vergleichsoperatoren zur Verfügung stehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2255902</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2255902</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Sun, 30 Sep 2012 20:31:21 GMT</pubDate></item><item><title><![CDATA[Reply to Vergleich von Objekten on Sun, 30 Sep 2012 22:53:46 GMT]]></title><description><![CDATA[<p>TyRoXx schrieb:</p>
<blockquote>
<p>Tja, du kannst aber nichts testen, was die Klasse gar nicht kann.</p>
</blockquote>
<p>Also... diesen Satz kann ich irgendwie nicht nachvollziehen, ehrlich))))</p>
<p>Eisflamme schrieb:</p>
<blockquote>
<p>Na dann mach doch einfach:<br />
dennoch schlage ich vor einfach darauf zu vertrauen, dass operator== da ist<br />
und sorge gleichzeitig dafür, dass von jeder Klasse, die für Deine Unit-Tests zur Verfügung stehen soll, Vergleichsoperatoren zur Verfügung stehen.</p>
</blockquote>
<p>Ja das hört sich dann doch sinnvoller und günstiger an als dauernd an komplizierten Sachen zu schrauben.</p>
<p>Nagut, werde ich wohl stets den Vergleichsoperator überladen.</p>
<p>Danke allen die geholfen haben!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2255915</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2255915</guid><dc:creator><![CDATA[RussianTux]]></dc:creator><pubDate>Sun, 30 Sep 2012 22:53:46 GMT</pubDate></item><item><title><![CDATA[Reply to Vergleich von Objekten on Mon, 01 Oct 2012 13:12:28 GMT]]></title><description><![CDATA[<p>RussianTux schrieb:</p>
<blockquote>
<p>TyRoXx schrieb:</p>
<blockquote>
<p>Tja, du kannst aber nichts testen, was die Klasse gar nicht kann.</p>
</blockquote>
<p>Also... diesen Satz kann ich irgendwie nicht nachvollziehen, ehrlich))))</p>
</blockquote>
<p>Der Satz ist aber der Knackpunkt.<br />
Was ein Objekt &quot;ist&quot;, definiert sich dadurch was man über das public Interface damit machen kann, welche Informationen man über das public Interface bekommen kann etc.<br />
D.h. wenn du zwei &quot;MyClass&quot; Objekte hast, die sich gleich verhalten (gemessen an ihrem public Interface), dann sind die auch gleich.<br />
D.h. verwende einfach das public Interface um die beiden Objekte zu vergleichen.</p>
<p>Dass du dazu u.U. für jede Klasse eigenen Code schreiben musst ist klar, ist halt so, Pech.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2256085</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2256085</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 01 Oct 2012 13:12:28 GMT</pubDate></item><item><title><![CDATA[Reply to Vergleich von Objekten on Mon, 01 Oct 2012 19:25:23 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>RussianTux schrieb:</p>
<blockquote>
<p>TyRoXx schrieb:</p>
<blockquote>
<p>Tja, du kannst aber nichts testen, was die Klasse gar nicht kann.</p>
</blockquote>
<p>Also... diesen Satz kann ich irgendwie nicht nachvollziehen, ehrlich))))</p>
</blockquote>
<p>Der Satz ist aber der Knackpunkt.<br />
Was ein Objekt &quot;ist&quot;, definiert sich dadurch was man über das public Interface damit machen kann, welche Informationen man über das public Interface bekommen kann etc.<br />
D.h. wenn du zwei &quot;MyClass&quot; Objekte hast, die sich gleich verhalten (gemessen an ihrem public Interface), dann sind die auch gleich.<br />
D.h. verwende einfach das public Interface um die beiden Objekte zu vergleichen.</p>
<p>Dass du dazu u.U. für jede Klasse eigenen Code schreiben musst ist klar, ist halt so, Pech.</p>
</blockquote>
<p>Das ist nicht Pech, das ist unklug und unproduktiv für einen UnitTest stets neuen Code zu schreiben...</p>
<p>Ich habe einfach beschlossen den Vergleichsoperator dafür zu nutzen, da die Klassen ja sowieso immer meine Sind und somit einfach nur die Operator-Support-Regel eingehalten werden muss</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2256232</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2256232</guid><dc:creator><![CDATA[RussianTux]]></dc:creator><pubDate>Mon, 01 Oct 2012 19:25:23 GMT</pubDate></item></channel></rss>