<?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[moneypunct&amp;lt;&amp;gt; facet]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich wollte mal nachfragen, warum folgendes nicht funktioniert:</p>
<pre><code class="language-cpp">#include &lt;locale&gt;

struct german_moneypunct : std::moneypunct&lt;char, true&gt;{
    std::string do_grouping() const override{
        return &quot;'&quot;;
    }

    std::string do_curr_symbol() const override{
        return &quot;€&quot;;
    }

    pattern do_pos_format() const override{
        return pattern{
            {
                std::moneypunct&lt;char&gt;::sign,
                        std::moneypunct&lt;char&gt;::value,
                        std::moneypunct&lt;char&gt;::symbol,
                        std::moneypunct&lt;char&gt;::none
            }
        };
    }
};

#include &lt;iostream&gt;
#include &lt;istream&gt;
#include &lt;iomanip&gt;

int main(){
    std::cout.imbue(std::locale(std::cout.getloc(), new german_moneypunct));
    std::locale loc = std::cout.getloc();

    using mp = std::money_put&lt;char, std::ostreambuf_iterator&lt;char&gt;&gt;;

    const mp&amp; put(std::use_facet&lt;mp&gt;(loc));
    put.put(std::ostreambuf_iterator&lt;char&gt;(std::cout), true, std::cout, ' ', 12345);
}
</code></pre>
<p>Ich habe mir vorgestellt, dass <code>12'345€</code> ausgegeben wird, wird aber <code>12345</code> ausgegeben.<br />
Warum?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/339528/moneypunct-lt-gt-facet</link><generator>RSS for Node</generator><lastBuildDate>Sun, 12 Apr 2026 00:55:23 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/339528.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 06 Sep 2016 16:54:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to moneypunct&amp;lt;&amp;gt; facet on Tue, 06 Sep 2016 16:54:34 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich wollte mal nachfragen, warum folgendes nicht funktioniert:</p>
<pre><code class="language-cpp">#include &lt;locale&gt;

struct german_moneypunct : std::moneypunct&lt;char, true&gt;{
    std::string do_grouping() const override{
        return &quot;'&quot;;
    }

    std::string do_curr_symbol() const override{
        return &quot;€&quot;;
    }

    pattern do_pos_format() const override{
        return pattern{
            {
                std::moneypunct&lt;char&gt;::sign,
                        std::moneypunct&lt;char&gt;::value,
                        std::moneypunct&lt;char&gt;::symbol,
                        std::moneypunct&lt;char&gt;::none
            }
        };
    }
};

#include &lt;iostream&gt;
#include &lt;istream&gt;
#include &lt;iomanip&gt;

int main(){
    std::cout.imbue(std::locale(std::cout.getloc(), new german_moneypunct));
    std::locale loc = std::cout.getloc();

    using mp = std::money_put&lt;char, std::ostreambuf_iterator&lt;char&gt;&gt;;

    const mp&amp; put(std::use_facet&lt;mp&gt;(loc));
    put.put(std::ostreambuf_iterator&lt;char&gt;(std::cout), true, std::cout, ' ', 12345);
}
</code></pre>
<p>Ich habe mir vorgestellt, dass <code>12'345€</code> ausgegeben wird, wird aber <code>12345</code> ausgegeben.<br />
Warum?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2507766</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2507766</guid><dc:creator><![CDATA[lokalisiert]]></dc:creator><pubDate>Tue, 06 Sep 2016 16:54:34 GMT</pubDate></item><item><title><![CDATA[Reply to moneypunct&amp;lt;&amp;gt; facet on Tue, 06 Sep 2016 17:17:39 GMT]]></title><description><![CDATA[<p>Bevor ich mir das Gehirn verrenke, um du verstehen, was du da gemacht hast: Weißt du bloß nicht, dass du hättest <code>std::cout &lt;&lt; std::put_money(12345)</code> hättest schreiben können oder willst du wirklich wissen, warum das genau so, wie du es gemacht hast, nicht funktioniert? Falls du letzteres wünscht, wäre es gut, wenn du erklärst, wieso du das überhaupt so gemacht hast.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2507769</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2507769</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 06 Sep 2016 17:17:39 GMT</pubDate></item><item><title><![CDATA[Reply to moneypunct&amp;lt;&amp;gt; facet on Tue, 06 Sep 2016 17:29:02 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Bevor ich mir das Gehirn verrenke, um du verstehen, was du da gemacht hast: Weißt du bloß nicht, dass du hättest <code>std::cout &lt;&lt; std::put_money(12345)</code> hättest schreiben können oder willst du wirklich wissen, warum das genau so, wie du es gemacht hast, nicht funktioniert? Falls du letzteres wünscht, wäre es gut, wenn du erklärst, wieso du das überhaupt so gemacht hast.</p>
</blockquote>
<p>Das mit <code>std::put_money()</code> ist mir bewusst, ich sah nur so viele Beispiele im Internet, die bei einer selbstdefinierten Facet <code>std::money_put&lt;&gt;</code> anstelle nahmen. Da hab ich das auch so gemacht. Aber <code>put_money()</code> und <code>money_put&lt;&gt;</code> erzielen in diesem Fall das gleiche Ergebnis: 12345.</p>
<p>Na ich erstelle ein eigenes Facet und überschreibe darin einige Memberfunktionen, die zur Darstellung dienen sollen. In der Hauptfunktion biege ich dann <code>std::cout</code> auf die Locale mit meinem selbstdefinierten Facet um und versuche einen Geldbetrag auszugeben. Aber warum das nicht so klappt, wie ich es mach, weiß ich leider nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2507770</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2507770</guid><dc:creator><![CDATA[lokalisiert]]></dc:creator><pubDate>Tue, 06 Sep 2016 17:29:02 GMT</pubDate></item><item><title><![CDATA[Reply to moneypunct&amp;lt;&amp;gt; facet on Wed, 07 Sep 2016 09:00:57 GMT]]></title><description><![CDATA[<p>lokalisiert schrieb:</p>
<blockquote>
<p>Ich habe mir vorgestellt, dass <code>12'345€</code> ausgegeben wird, wird aber <code>12345</code> ausgegeben.<br />
Warum?</p>
</blockquote>
<p>weil das so richtig ist.</p>
<p>Ändere doch mal Zeile 6 nach ' <code>return &quot;\003&quot;;</code> ' und füge vor Zeile 38 noch ein ' <code>std::cout &lt;&lt; std::showbase;</code> ' ein.<br />
Anschließend informiere Dich bitte was ' <code>grouping()</code> ' bedeutet: <a href="http://en.cppreference.com/w/cpp/locale/moneypunct/grouping" rel="nofollow">http://en.cppreference.com/w/cpp/locale/moneypunct/grouping</a></p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2507808</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2507808</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Wed, 07 Sep 2016 09:00:57 GMT</pubDate></item><item><title><![CDATA[Reply to moneypunct&amp;lt;&amp;gt; facet on Wed, 07 Sep 2016 11:05:34 GMT]]></title><description><![CDATA[<p>Verstehe ich immer noch nicht so recht.<br />
Ich habe den Code mal auf folgendes umgeändert:</p>
<pre><code class="language-cpp">#include &lt;locale&gt;

struct german_moneypunct : std::moneypunct&lt;char, true&gt;{
    std::string do_curr_symbol() const override{
        return &quot;€&quot;;
    }

    pattern do_pos_format() const override{
        return pattern{{sign, value, symbol, none}};
    }

    char do_thousands_sep() const override{
        return ' ';
    }
};

#include &lt;iostream&gt;
#include &lt;iomanip&gt;

int main(){
    std::cout.imbue(std::locale(std::cout.getloc(), new german_moneypunct));
    std::locale loc = std::cout.getloc();
    std::cout &lt;&lt; std::showbase &lt;&lt; std::put_money(12345);

}
</code></pre>
<p>Aber da kommt immer noch '12345' raus, keine Ahnung warum?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2507824</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2507824</guid><dc:creator><![CDATA[lokalisiert]]></dc:creator><pubDate>Wed, 07 Sep 2016 11:05:34 GMT</pubDate></item><item><title><![CDATA[Reply to moneypunct&amp;lt;&amp;gt; facet on Wed, 07 Sep 2016 11:56:08 GMT]]></title><description><![CDATA[<p>Bei Deiner Facette ' <code>german_moneypunct</code> ' ist das Flag <strong>International</strong> gesetzt. Der zweite Parameter im Manipulator <code>put_money</code> ist genau dieses Flag. Der Default-Wert ist hier aber = <code>false</code> .</p>
<p>Also entweder änderst Du jetzt Zeile 4 nach</p>
<pre><code>struct german_moneypunct : std::moneypunct&lt;char, false&gt;{ // false ist default und kann auch weg gelassen werden
</code></pre>
<p>oder gibst das beim Manipulator in Zeile 26 mit an:</p>
<pre><code>std::cout &lt;&lt; std::showbase &lt;&lt; std::put_money( 12345, true );
</code></pre>
<p>.. wobei International= <code>true</code> UND '<strong>german</strong>_moneypunct' ist doch ein Widerspruch in sich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2507830</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2507830</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Wed, 07 Sep 2016 11:56:08 GMT</pubDate></item><item><title><![CDATA[Reply to moneypunct&amp;lt;&amp;gt; facet on Wed, 07 Sep 2016 12:02:20 GMT]]></title><description><![CDATA[<p>Tatsache, das klappt.</p>
<p>Dann hätte ich aber noch zwei Fragen:</p>
<ol>
<li>Wozu eigentlich das International-Boolean?</li>
<li>Wie kann man mehrere Facets in einer Locale miteinander mischen/verbinden? Einfach durch Mehrfachvererbung?</li>
</ol>
]]></description><link>https://www.c-plusplus.net/forum/post/2507831</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2507831</guid><dc:creator><![CDATA[lokalisiert]]></dc:creator><pubDate>Wed, 07 Sep 2016 12:02:20 GMT</pubDate></item><item><title><![CDATA[Reply to moneypunct&amp;lt;&amp;gt; facet on Wed, 07 Sep 2016 12:46:54 GMT]]></title><description><![CDATA[<p>zu 1) weiß ich nicht<br />
zu 2) was verstehst Du unter mischen/verbinden? Du kannst in eine Locale (im Prinzip) beliebig viele Facetten unterschiedlichen Typs einstellen. Einschließlich neuer User-Defined-Facetten. Siehe dazu auch <a href="http://www.angelikalanger.com/Articles/C++Report/UserDefinedFacets/UserDefinedFacets.html" rel="nofollow">http://www.angelikalanger.com/Articles/C++Report/UserDefinedFacets/UserDefinedFacets.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2507835</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2507835</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Wed, 07 Sep 2016 12:46:54 GMT</pubDate></item><item><title><![CDATA[Reply to moneypunct&amp;lt;&amp;gt; facet on Wed, 07 Sep 2016 12:57:43 GMT]]></title><description><![CDATA[<p>Zu 2)</p>
<p>Ich meine mehrere user-defined Facetten in einer Locale verwenden.<br />
So z.B. (was nicht geht):</p>
<pre><code class="language-cpp">std::locale loc(std::locale{}, {new german_numpunct, new german_moneypunct});
</code></pre>
<p>Wie verwende ich mehrere Facetten innerhalb einer Locale?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2507839</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2507839</guid><dc:creator><![CDATA[lokalisiert]]></dc:creator><pubDate>Wed, 07 Sep 2016 12:57:43 GMT</pubDate></item><item><title><![CDATA[Reply to moneypunct&amp;lt;&amp;gt; facet on Wed, 07 Sep 2016 13:02:47 GMT]]></title><description><![CDATA[<p>Ich könnte für jedes Facet ein eigenes Locale erstellen und dann mittels <code>std::locale::combine()</code> zusammenschnipseln.<br />
Aber irgendwie finde ich, muss es doch eine bessere Lösung dafür geben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2507840</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2507840</guid><dc:creator><![CDATA[lokalisiert]]></dc:creator><pubDate>Wed, 07 Sep 2016 13:02:47 GMT</pubDate></item><item><title><![CDATA[Reply to moneypunct&amp;lt;&amp;gt; facet on Wed, 07 Sep 2016 13:10:17 GMT]]></title><description><![CDATA[<p>lokalisiert schrieb:</p>
<blockquote>
<p>Wie verwende ich mehrere Facetten innerhalb einer Locale?</p>
</blockquote>
<p>Indem Du zwei (oder mehrmals) hintereinander</p>
<pre><code>std::cout.imbue(std::locale(std::cout.getloc(), new german_moneypunct));
    std::cout.imbue(std::locale(std::cout.getloc(), new mySpezialFacet));
    std::cout.imbue(std::locale(std::cout.getloc(), new numInRoemischenZiffern));
</code></pre>
<p>.. den Konstruktor von std::locale aufrufst.</p>
<p>Bzw. wohl auch so:</p>
<pre><code>auto loc = std::cout.getloc();
    loc = std::locale( loc, new german_moneypunct );
    loc = std::locale( loc, new mySpezialFacet );
    loc = std::locale( loc, new numInRoemischenZiffern );
    std::cout.imbue( loc );
</code></pre>
<p>Wichtig: sie müssen alle über eine eigene <a href="http://en.cppreference.com/w/cpp/locale/locale/id" rel="nofollow">std::locale::id</a> verfügen, gleiche Ids werden überschrieben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2507841</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2507841</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Wed, 07 Sep 2016 13:10:17 GMT</pubDate></item><item><title><![CDATA[Reply to moneypunct&amp;lt;&amp;gt; facet on Wed, 07 Sep 2016 13:23:20 GMT]]></title><description><![CDATA[<p>Ahja, danke.<br />
Problem gelöst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2507842</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2507842</guid><dc:creator><![CDATA[lokalisiert]]></dc:creator><pubDate>Wed, 07 Sep 2016 13:23:20 GMT</pubDate></item></channel></rss>