<?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[operator&amp;gt;&amp;gt;]]></title><description><![CDATA[<p>Hi Leute<br />
hab kleine probleme mit operator&gt;&gt;.<br />
Ich möchte gerne das ich das so schreiben kann:</p>
<pre><code class="language-cpp">int main()
{
    int zahl;

    set a(&quot;test1.ini&quot;) &gt;&gt; read(&quot;a&quot;) &gt;&gt; toint() &gt;&gt; zahl;

    system(&quot;PAUSE&quot;);
    return 0;
}
</code></pre>
<p>Die Funktionen <strong>read()</strong> und <strong>toint()</strong> sind Funktionen der Klasse <strong>set</strong>.<br />
Der Operator <strong>&gt;&gt;</strong> soll das <strong>a.</strong> bei a.read() ersetzen.</p>
<p>Geht sowas überhaupt?</p>
<p>Gruß<br />
Gamebuntu</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/281890/operator-gt-gt</link><generator>RSS for Node</generator><lastBuildDate>Sun, 23 Aug 2026 11:26:57 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/281890.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 09 Feb 2011 20:43:14 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to operator&amp;gt;&amp;gt; on Wed, 09 Feb 2011 20:43:14 GMT]]></title><description><![CDATA[<p>Hi Leute<br />
hab kleine probleme mit operator&gt;&gt;.<br />
Ich möchte gerne das ich das so schreiben kann:</p>
<pre><code class="language-cpp">int main()
{
    int zahl;

    set a(&quot;test1.ini&quot;) &gt;&gt; read(&quot;a&quot;) &gt;&gt; toint() &gt;&gt; zahl;

    system(&quot;PAUSE&quot;);
    return 0;
}
</code></pre>
<p>Die Funktionen <strong>read()</strong> und <strong>toint()</strong> sind Funktionen der Klasse <strong>set</strong>.<br />
Der Operator <strong>&gt;&gt;</strong> soll das <strong>a.</strong> bei a.read() ersetzen.</p>
<p>Geht sowas überhaupt?</p>
<p>Gruß<br />
Gamebuntu</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2018912</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2018912</guid><dc:creator><![CDATA[CCodex]]></dc:creator><pubDate>Wed, 09 Feb 2011 20:43:14 GMT</pubDate></item><item><title><![CDATA[Reply to operator&amp;gt;&amp;gt; on Wed, 09 Feb 2011 21:07:42 GMT]]></title><description><![CDATA[<p>gamebuntu schrieb:</p>
<blockquote>
<p>Geht sowas überhaupt?</p>
</blockquote>
<p>Nein. Zumindest nicht allgemein ohne ganz viel Handarbeit für jede einzelne Funktion. Mit Makrogefrikkel geht's natürlich, aber das willst du nicht.</p>
<p>Gegenfrage: Wozu?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2018923</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2018923</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 09 Feb 2011 21:07:42 GMT</pubDate></item><item><title><![CDATA[Reply to operator&amp;gt;&amp;gt; on Thu, 10 Feb 2011 06:26:00 GMT]]></title><description><![CDATA[<p>Man soll so einfach wie möglich meine Funktionen aufrufen können,<br />
statt das man es so machen muss:</p>
<pre><code class="language-cpp">set a(&quot;test1.ini&quot;);
    a.read(&quot;a&quot;);
    zahl = a.toint();
</code></pre>
<p>Und ich kann was dabei lernen da ich im Bereich<br />
Operatoren noch nichts gemacht hab.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2019012</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2019012</guid><dc:creator><![CDATA[CCodex]]></dc:creator><pubDate>Thu, 10 Feb 2011 06:26:00 GMT</pubDate></item><item><title><![CDATA[Reply to operator&amp;gt;&amp;gt; on Thu, 10 Feb 2011 07:40:44 GMT]]></title><description><![CDATA[<p>Zunächst solltest Du auf jeden Fall - allein schon um Verwechslungen zu vermeiden - die Klasse anderes nennen, denn <code>set</code> ist bereits eine Klasse der STL.</p>
<p>read( ) und toint( ) sind Methoden <em>Deiner</em> Klasse set. Also musst Du sie auch damit zusammen aufrufen, also a.toint( ). &quot;So einfach wie möglich&quot; ist ein Trugschluss, wenn es Dir zwar zwei Zeichen zu schreiben erspart, aber vom Syntax her so kurios würde, dass Du selbst und kein anderer Programmierer auf den ersten Blick sieht, was da überhaupt passiert - und warum es nicht auf die ebenso einfache &quot;normale&quot; Weise passiert.</p>
<p>Es ist durchaus möglich, Objekte in einen Stream zu hängen. Dazu definiert man die entsprechenden friend-Funktionen <code>operator&gt;&gt;( )</code> oder <code>operator&lt;&lt;( )</code> . Bei einem tostring( ) könnte das z.B. sinnvoll sein, um den Inhalt eines Objekts &quot;stringisiert&quot; an einen Stream zu schicken, wenn also z.B. ein Objekt message eine Datenstruktur enthält, Du aber an einen Stream den tatsächlichen XML-String rausgeben willst:</p>
<pre><code class="language-cpp">cout &lt;&lt; &quot;Elemente: &quot; &lt;&lt; message &lt;&lt; endl;
</code></pre>
<p>Aber das solltest Du gut überlegen, ob Du das wirklich willst! Meistens macht es mehr Arbeit als Nutzen. Denn ein tostring( ), das ein <code>string</code> zurückgibt, geht genauso.</p>
<p>~Edit: Beispiel mit xml-message~</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2019017</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2019017</guid><dc:creator><![CDATA[minastaros]]></dc:creator><pubDate>Thu, 10 Feb 2011 07:40:44 GMT</pubDate></item><item><title><![CDATA[Reply to operator&amp;gt;&amp;gt; on Thu, 10 Feb 2011 07:56:40 GMT]]></title><description><![CDATA[<p>Man kann sich schon sowas basteln. Entweder mit eigenen Methodenobjekten oder schon fertig <code>std::function</code> bzw. <code>boost:function</code> . Etwas in der Art:</p>
<pre><code class="language-cpp">class set
{
public:
    int toint()
    {
        return 1;
    }
    void read(const std::string&amp; s)
    {

    }
};

template&lt;typename T&gt;
class set_method
{
public:
    virtual T operator()(set&amp; s) const = 0;
};

class read : public set_method&lt;set&amp;&gt;
{
    std::string s_;
public:
    read(const char* s) : s_(s) {}
    set&amp; operator()(set&amp; s) const
    {
        s.read(s_);
        return s;
    }
};

template&lt;typename T&gt;
T operator&gt;&gt;(set&amp; s, const set_method&lt;T&gt;&amp; method)
{
    return method(s);
}

int operator&gt;&gt;(set&amp; s, std::function&lt;int (set*)&gt; f)
{
    return f(&amp;s);
}

int main() 
{
    set a;
    a &gt;&gt; read(&quot;a&quot;) &gt;&gt; &amp;set::toint;

    return 0;
}
</code></pre>
<p>Allerdings halte ich das auch für vollkommenden Schwachsinn. Kein normaler C++ Programmierer wird auf Anhieb verstehen was in dieser Zeile merkwürdiges passiert. Missbrauche Spachfeatures nicht um ungewöhnliche Syntax zu realisieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2019021</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2019021</guid><dc:creator><![CDATA[brotbernd]]></dc:creator><pubDate>Thu, 10 Feb 2011 07:56:40 GMT</pubDate></item><item><title><![CDATA[Reply to operator&amp;gt;&amp;gt; on Thu, 10 Feb 2011 10:14:45 GMT]]></title><description><![CDATA[<p>gamebuntu schrieb:</p>
<blockquote>
<p>Man soll so einfach wie möglich meine Funktionen aufrufen können,<br />
statt das man es so machen muss:</p>
<pre><code class="language-cpp">set a(&quot;test1.ini&quot;);
    a.read(&quot;a&quot;);
    zahl = a.toint();
</code></pre>
<p>Und ich kann was dabei lernen da ich im Bereich<br />
Operatoren noch nichts gemacht hab.</p>
</blockquote>
<p>Du kannst durchaus so etwas machen:</p>
<pre><code class="language-cpp">zahl= set(&quot;test1.ini&quot;).read(&quot;a&quot;).toint();
</code></pre>
<p>Dafür musste bloß bei read eine Referenz zurückgeben, genauso wie wenn du den Operator &gt;&gt; selber schreiben würdest.</p>
<p>Ist aber verpönt, weil unübersichtlich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2019054</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2019054</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 10 Feb 2011 10:14:45 GMT</pubDate></item><item><title><![CDATA[Reply to operator&amp;gt;&amp;gt; on Thu, 10 Feb 2011 16:15:10 GMT]]></title><description><![CDATA[<p>Ok dann werd ich das wohl lieber lassen sowas zu machen.<br />
Danke für die Antworten und den Rat sowas nicht zu machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2019222</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2019222</guid><dc:creator><![CDATA[CCodex]]></dc:creator><pubDate>Thu, 10 Feb 2011 16:15:10 GMT</pubDate></item><item><title><![CDATA[Reply to operator&amp;gt;&amp;gt; on Thu, 10 Feb 2011 16:24:16 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Ist aber verpönt, weil unübersichtlich.</p>
</blockquote>
<p>Och, bei Fenster-GUI-Kram fände ich Function Chaining manchmal ganz schön:</p>
<pre><code class="language-cpp">Window .setWidth(500) .setVisible(true) .setCloseHandler(foo);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2019228</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2019228</guid><dc:creator><![CDATA[fdfdg]]></dc:creator><pubDate>Thu, 10 Feb 2011 16:24:16 GMT</pubDate></item><item><title><![CDATA[Reply to operator&amp;gt;&amp;gt; on Thu, 10 Feb 2011 16:28:10 GMT]]></title><description><![CDATA[<p>fdfdg schrieb:</p>
<blockquote>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Ist aber verpönt, weil unübersichtlich.</p>
</blockquote>
<p>Och, bei Fenster-GUI-Kram fände ich Function Chaining manchmal ganz schön:</p>
<pre><code class="language-cpp">Window .setWidth(500) .setVisible(true) .setCloseHandler(foo);
</code></pre>
</blockquote>
<p>Ja, das ist keine allgemeine Regel. Aber etwas wie das hier gewünschte <code>set(&quot;test1.ini&quot;).read(&quot;a&quot;).toint();</code> ist wirklich unschön. Es gibt keinen einleuchtenden Grund, warum eine Funktion namens read eine Referenz auf das Objekt zurückgeben sollte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2019233</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2019233</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 10 Feb 2011 16:28:10 GMT</pubDate></item><item><title><![CDATA[Reply to operator&amp;gt;&amp;gt; on Thu, 10 Feb 2011 16:33:37 GMT]]></title><description><![CDATA[<p>Templates:</p>
<pre><code class="language-cpp">#include &lt;sstream&gt;
#include &lt;iostream&gt;
#include &lt;map&gt;

std::map&lt;std::string, std::string&gt; data;

template&lt;typename Value&gt;
void get(const std::string&amp; key, Value&amp; val)
{
	std::stringstream strm;
	strm &lt;&lt; data[key]; // Wert hier einlesen
	strm &gt;&gt; val;
}

template&lt;typename Value&gt;
void set(const std::string&amp; key, Value val)
{
	std::stringstream strm;
	strm &lt;&lt; val;

	data[key] = strm.str();
}

int main()
{
	set(&quot;Preis&quot;, 13.34);
	set(&quot;Artikel&quot;, &quot;USB-Maus&quot;);

	double preis;
	std::string name;

	get(&quot;Preis&quot;, preis);
	get(&quot;Artikel&quot;, name);

	std::cout &lt;&lt; name &lt;&lt; &quot; : &quot; &lt;&lt; preis &lt;&lt; &quot; Euro &quot; &lt;&lt; std::endl;

	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2019236</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2019236</guid><dc:creator><![CDATA[#öä#öä]]></dc:creator><pubDate>Thu, 10 Feb 2011 16:33:37 GMT</pubDate></item><item><title><![CDATA[Reply to operator&amp;gt;&amp;gt; on Thu, 10 Feb 2011 16:44:09 GMT]]></title><description><![CDATA[<p>#öä#öä, du verlierst so Typsicherheit. Irgendeine Art der Fehlerbehandlung zur Laufzeit (mindestens Stream-Flags abfragen) würde ich auch einbauen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2019242</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2019242</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 10 Feb 2011 16:44:09 GMT</pubDate></item></channel></rss>