<?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[Custom Iterator über vector mit boost::tuples]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich konnte leider keine für mich brauchbare Hilfe ergoogeln und würde mich deshalb freuen wenn mir hier jemand weiterhelfen könnte.</p>
<p>Ich habe einen stl container wie folgt definiert:</p>
<pre><code>typedef boost::tuple&lt;int, Point_3, Color_3, Vector_3&gt; IRGBNPoint;
typedef std::vector&lt;IRGBNPoint&gt; IRGBNPointList;
</code></pre>
<p>Weiterhin habe ich mir Iteratoren definiert die über meine Tuples im vector gehen:</p>
<pre><code>IRGBNPointList::iterator points_begin() { return _points-&gt;begin(); }
IRGBNPointList::iterator points_end() { return _points-&gt;end(); }
</code></pre>
<p>Was ich aber noch zusätzlich gerne hätte wären Iteratoren die mir über einen spezifischen Eintrag des Boost Tuples, also über jeden Point_3, Color_3 oder Vector_3 in meinem std::vector gehen. Für jeden Tip wie ich da rangehe wäre ich sehr dankbar.</p>
<p>Viele Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/338402/custom-iterator-über-vector-mit-boost-tuples</link><generator>RSS for Node</generator><lastBuildDate>Mon, 13 Apr 2026 16:29:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/338402.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 13 Jun 2016 16:35:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Custom Iterator über vector mit boost::tuples on Mon, 13 Jun 2016 16:35:01 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich konnte leider keine für mich brauchbare Hilfe ergoogeln und würde mich deshalb freuen wenn mir hier jemand weiterhelfen könnte.</p>
<p>Ich habe einen stl container wie folgt definiert:</p>
<pre><code>typedef boost::tuple&lt;int, Point_3, Color_3, Vector_3&gt; IRGBNPoint;
typedef std::vector&lt;IRGBNPoint&gt; IRGBNPointList;
</code></pre>
<p>Weiterhin habe ich mir Iteratoren definiert die über meine Tuples im vector gehen:</p>
<pre><code>IRGBNPointList::iterator points_begin() { return _points-&gt;begin(); }
IRGBNPointList::iterator points_end() { return _points-&gt;end(); }
</code></pre>
<p>Was ich aber noch zusätzlich gerne hätte wären Iteratoren die mir über einen spezifischen Eintrag des Boost Tuples, also über jeden Point_3, Color_3 oder Vector_3 in meinem std::vector gehen. Für jeden Tip wie ich da rangehe wäre ich sehr dankbar.</p>
<p>Viele Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2498694</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2498694</guid><dc:creator><![CDATA[_patrice_]]></dc:creator><pubDate>Mon, 13 Jun 2016 16:35:01 GMT</pubDate></item><item><title><![CDATA[Reply to Custom Iterator über vector mit boost::tuples on Mon, 13 Jun 2016 16:39:41 GMT]]></title><description><![CDATA[<pre><code>template &lt;typename T&gt;
struct Extractor {
    template &lt;typename Tuple&gt;
    constexpr decltype(auto) operator()(Tuple&amp;&amp; tup) {
        return std::get&lt;T&gt;(std::forward&lt;Tuple&gt;(tup));}
};

using iter = boost::transform_iterator&lt;Extractor&lt;Point_3&gt;, IRGBNPointList::iterator&gt;;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2498696</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2498696</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Mon, 13 Jun 2016 16:39:41 GMT</pubDate></item><item><title><![CDATA[Reply to Custom Iterator über vector mit boost::tuples on Mon, 13 Jun 2016 18:53:44 GMT]]></title><description><![CDATA[<p>Danke Arcoth,</p>
<p>das ist genau was ich brauche, nur leider noch etwas zu hoch für mich...! Ich bekomme in Deinem Beispiel für Zeile 4 die Fehler:</p>
<p>error: C2062: type 'auto' unexpected</p>
<p>und</p>
<p>error: C3553: decltype expects an expression not a type</p>
<p>Leider komme ich nicht dahinter was das Problem verursacht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2498722</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2498722</guid><dc:creator><![CDATA[_patrice_]]></dc:creator><pubDate>Mon, 13 Jun 2016 18:53:44 GMT</pubDate></item><item><title><![CDATA[Reply to Custom Iterator über vector mit boost::tuples on Mon, 13 Jun 2016 21:04:46 GMT]]></title><description><![CDATA[<p>Ach, du benutzt VC++....</p>
<pre><code>template &lt;typename T&gt;
struct Extractor {
    template &lt;typename Tuple&gt;
    constexpr auto operator()(Tuple&amp;&amp; tup) -&gt;  decltype(std::get&lt;T&gt;(std::forward&lt;Tuple&gt;(tup))) {
        return std::get&lt;T&gt;(std::forward&lt;Tuple&gt;(tup));} // Kann man mit einem Makro verschönern.
};

using iter = boost::transform_iterator&lt;Extractor&lt;Point_3&gt;, IRGBNPointList::iterator&gt;;
</code></pre>
<p>Es könnte sein, dass get&lt;T&gt; Probleme macht. In dem Fall musst du stattdessen mit den <a href="http://en.cppreference.com/w/cpp/utility/tuple/get" rel="nofollow">Indexversionen</a> arbeiten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2498735</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2498735</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Mon, 13 Jun 2016 21:04:46 GMT</pubDate></item><item><title><![CDATA[Reply to Custom Iterator über vector mit boost::tuples on Tue, 14 Jun 2016 07:53:20 GMT]]></title><description><![CDATA[<p>Danke nochmal Arcoth,</p>
<p>hat mich noch viel Schweiß und Tränen gekostet und das Ergebnis ist noch nicht sehr befriedigend, aber ich habe etwas zum laufen gebracht dank Deiner Hilfe, ich poste mal wie, für eventuelle Leidensgenossen.</p>
<p>Leider ist constexpr in Visual Studio 2013 noch nicht verfügbar, ob es ausschließlich daran lag kann ich nicht nachvollziehen, ich musste deshalb auf ein Templatelevel verzichten und einen Extractor für jeden meiner Tupleeinträge erzeugen:</p>
<pre><code>// Extrahiert ausschließlich den nullten Tuple Eintrag
struct Extractor0 {
    template &lt;typename Tuple&gt;
    Point_3&amp; operator()(Tuple&amp;&amp; tup) const {
        return tup.get&lt;0&gt;();}
};

typedef boost::transform_iterator&lt;Extractor0, RGBNPointList::iterator, Point_3&amp;&gt; point_iter;
</code></pre>
<p>Verwendet wird das Ganze dann so:</p>
<pre><code>point_iter points_begin() {
       Extractor0 m;
       return point_iter(_raw_points-&gt;begin(), m);
}
point_iter points_end() {
       Extractor0  m;
       return point_iter(_raw_points-&gt;end(), m);

}
</code></pre>
<p>_raw_points ist vom typ:</p>
<pre><code>typedef boost::tuple&lt;Point_3, Point_3, Vector_3&gt; RGBNPoint;
typedef std::vector&lt;RGBNPoint&gt; RGBNPointList
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2498758</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2498758</guid><dc:creator><![CDATA[_patrice_]]></dc:creator><pubDate>Tue, 14 Jun 2016 07:53:20 GMT</pubDate></item></channel></rss>