<?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[boost::spirit:qi permutation von attributen?]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe folgenden code der funktioniert:</p>
<pre><code>#include &lt;boost/spirit/include/qi.hpp&gt;
#include &lt;boost/fusion/include/std_pair.hpp&gt;
#include &lt;iostream&gt;
int main(){
    using namespace boost::spirit::qi;
    std::string contents(&quot;1234 5678&quot;);
    std::vector&lt;std::pair&lt;int,double&gt; &gt; p;
    phrase_parse(
    contents.begin(), contents.end(), 
        *(int_&gt;&gt; double_),
        space , p
    );

    std::cout&lt;&lt;p[0].first&lt;&lt;&quot; &quot;&lt;&lt;p[0].second;
}
</code></pre>
<p>so klappt das auch ganz gut. leider muss ich in die selbe datenstruktur noch genau die umgedrehte reihenfolge später einlesen, das heißt ich möchte</p>
<pre><code>*(double_&gt;&gt; int_)
</code></pre>
<p>aber alles was ich mir aus der docu rauslesen konnte funktionierte nicht in der art, das ich ungefähr 100KB fehlermeldungen hatte mit Typen die ungefähr 10 Bildschirmseiten lang waren <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="🤡"
    />.</p>
<p>Ohne den Vektor hätte ich es &quot;fast&quot; zum Laufen gekriegt, indem ich mithilfe von phönix und actors folgendes geschrieben habe:</p>
<pre><code>double_[at_c&lt;1&gt;(_val) = _1] &gt;&gt; int_[at_c&lt;0&gt;(_val) = _1]
</code></pre>
<p>aber die Ausgabe hinterher war 5678 5678. Mit vektor allerdings kamen die gruseligsten compilefehler die darauf hinausliefen, das den actors direkt ein std::vector übergeben wird.</p>
<p>Hat jemand eine Ahnung, wie man das richtig macht?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/319394/boost-spirit-qi-permutation-von-attributen</link><generator>RSS for Node</generator><lastBuildDate>Sun, 26 Jul 2026 05:16:55 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/319394.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 16 Aug 2013 19:00:20 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to boost::spirit:qi permutation von attributen? on Fri, 16 Aug 2013 19:00:20 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe folgenden code der funktioniert:</p>
<pre><code>#include &lt;boost/spirit/include/qi.hpp&gt;
#include &lt;boost/fusion/include/std_pair.hpp&gt;
#include &lt;iostream&gt;
int main(){
    using namespace boost::spirit::qi;
    std::string contents(&quot;1234 5678&quot;);
    std::vector&lt;std::pair&lt;int,double&gt; &gt; p;
    phrase_parse(
    contents.begin(), contents.end(), 
        *(int_&gt;&gt; double_),
        space , p
    );

    std::cout&lt;&lt;p[0].first&lt;&lt;&quot; &quot;&lt;&lt;p[0].second;
}
</code></pre>
<p>so klappt das auch ganz gut. leider muss ich in die selbe datenstruktur noch genau die umgedrehte reihenfolge später einlesen, das heißt ich möchte</p>
<pre><code>*(double_&gt;&gt; int_)
</code></pre>
<p>aber alles was ich mir aus der docu rauslesen konnte funktionierte nicht in der art, das ich ungefähr 100KB fehlermeldungen hatte mit Typen die ungefähr 10 Bildschirmseiten lang waren <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="🤡"
    />.</p>
<p>Ohne den Vektor hätte ich es &quot;fast&quot; zum Laufen gekriegt, indem ich mithilfe von phönix und actors folgendes geschrieben habe:</p>
<pre><code>double_[at_c&lt;1&gt;(_val) = _1] &gt;&gt; int_[at_c&lt;0&gt;(_val) = _1]
</code></pre>
<p>aber die Ausgabe hinterher war 5678 5678. Mit vektor allerdings kamen die gruseligsten compilefehler die darauf hinausliefen, das den actors direkt ein std::vector übergeben wird.</p>
<p>Hat jemand eine Ahnung, wie man das richtig macht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2346508</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2346508</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Fri, 16 Aug 2013 19:00:20 GMT</pubDate></item><item><title><![CDATA[Reply to boost::spirit:qi permutation von attributen? on Fri, 16 Aug 2013 20:00:58 GMT]]></title><description><![CDATA[<p>Kann es sein, dass Du die Typen im std:: pair nicht nachgezogen hast?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2346519</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2346519</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Fri, 16 Aug 2013 20:00:58 GMT</pubDate></item><item><title><![CDATA[Reply to boost::spirit:qi permutation von attributen? on Fri, 16 Aug 2013 20:08:54 GMT]]></title><description><![CDATA[<p>Tachyon schrieb:</p>
<blockquote>
<p>Kann es sein, dass Du die Typen im std:: pair nicht nachgezogen hast?</p>
</blockquote>
<p>Ja. Genau das ist das Problem. Ich kann sie nicht nachziehen, weil sie im restlichen code so sein müssen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2346523</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2346523</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Fri, 16 Aug 2013 20:08:54 GMT</pubDate></item><item><title><![CDATA[Reply to boost::spirit:qi permutation von attributen? on Fri, 16 Aug 2013 20:21:02 GMT]]></title><description><![CDATA[<p>Mal solange drauf eingeprügelt bis es lief. Ist wahrscheinlich umständlicher als nötig und ich habe nicht wirklich Ahnung, was ich hier tue</p>
<pre><code class="language-cpp">#include &lt;boost/spirit/include/qi.hpp&gt;
#include &lt;iostream&gt;
int main(){
    namespace spirit = boost::spirit;
    namespace qi = spirit::qi;
    namespace fusion = boost::fusion;
    std::string contents(&quot;1234 5678.9 5678.9 1234&quot;);
    std::vector&lt;std::pair&lt;int,double&gt; &gt; p;
    qi::phrase_parse(
        contents.begin(), contents.end(),
        *((qi::int_ - ( qi::int_ &gt;&gt; '.' )) &gt;&gt; qi::double_)[(
            [&amp;p](fusion::vector&lt;int,double&gt; v, qi::unused_type, qi::unused_type)
            {
                p.emplace_back(fusion::at_c&lt;0&gt;(v), fusion::at_c&lt;1&gt;(v));
            })] &gt;&gt;
        *(qi::double_ &gt;&gt; (qi::int_ - (qi::int_ &gt;&gt; '.')))[(
            [&amp;p](fusion::vector&lt;double,int&gt; v, qi::unused_type, qi::unused_type)
            {
                p.emplace_back(fusion::at_c&lt;1&gt;(v), fusion::at_c&lt;0&gt;(v));
            })],
        qi::space
    );

    std::cout&lt;&lt;p[0].first&lt;&lt;&quot; &quot;&lt;&lt;p[0].second&lt;&lt;'\n';
    std::cout&lt;&lt;p[1].first&lt;&lt;&quot; &quot;&lt;&lt;p[1].second&lt;&lt;'\n';
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2346529</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2346529</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 16 Aug 2013 20:21:02 GMT</pubDate></item><item><title><![CDATA[Reply to boost::spirit:qi permutation von attributen? on Sat, 17 Aug 2013 05:40:33 GMT]]></title><description><![CDATA[<p>Hmm. Ja, das sollte funktionieren. Ist natürlich maximal unelegant und ich hab keinen lambda support *seufz* muss ich wohl mit phoenix machen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2346568</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2346568</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Sat, 17 Aug 2013 05:40:33 GMT</pubDate></item></channel></rss>