<?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[Kann ich einen vector::iterator in einen anderen konvertieren?]]></title><description><![CDATA[<pre><code>A object;

std::vector&lt;A*&gt;::iterator it =
static_cast&lt;std::vector&lt;B*&gt;::iterator&gt;(object-&gt;GetChildList()-&gt;begin());
</code></pre>
<pre><code>error C2440: 'static_cast': 'std::_Vector_iterator&lt;_Ty,_Alloc&gt;' kann nicht in 'std::_Vector_iterator&lt;_Ty,_Alloc&gt;' konvertiert werden
</code></pre>
<p>Ist das realisierbar?</p>
<p>Ein einzelnes Objekt aus der Liste umkonvertieren geht, aber beim Iterator kommt immer der o.g. Fehler.</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/245401/kann-ich-einen-vector-iterator-in-einen-anderen-konvertieren</link><generator>RSS for Node</generator><lastBuildDate>Wed, 02 Sep 2026 22:45:01 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/245401.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 13 Jul 2009 19:26:13 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Kann ich einen vector::iterator in einen anderen konvertieren? on Mon, 13 Jul 2009 19:26:13 GMT]]></title><description><![CDATA[<pre><code>A object;

std::vector&lt;A*&gt;::iterator it =
static_cast&lt;std::vector&lt;B*&gt;::iterator&gt;(object-&gt;GetChildList()-&gt;begin());
</code></pre>
<pre><code>error C2440: 'static_cast': 'std::_Vector_iterator&lt;_Ty,_Alloc&gt;' kann nicht in 'std::_Vector_iterator&lt;_Ty,_Alloc&gt;' konvertiert werden
</code></pre>
<p>Ist das realisierbar?</p>
<p>Ein einzelnes Objekt aus der Liste umkonvertieren geht, aber beim Iterator kommt immer der o.g. Fehler.</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1742358</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1742358</guid><dc:creator><![CDATA[pewpy]]></dc:creator><pubDate>Mon, 13 Jul 2009 19:26:13 GMT</pubDate></item><item><title><![CDATA[Reply to Kann ich einen vector::iterator in einen anderen konvertieren? on Mon, 13 Jul 2009 19:28:18 GMT]]></title><description><![CDATA[<p>Was hast du vor? Wozu meinst du nen iterator casten zu müssen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1742360</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1742360</guid><dc:creator><![CDATA[rebelyell]]></dc:creator><pubDate>Mon, 13 Jul 2009 19:28:18 GMT</pubDate></item><item><title><![CDATA[Reply to Kann ich einen vector::iterator in einen anderen konvertieren? on Mon, 13 Jul 2009 19:32:49 GMT]]></title><description><![CDATA[<p>Ich habe in einer Liste viele Objekte gespeichert die von der selben Basisklasse abgeleitet sind.</p>
<p>Nun möchte irgendwo im Programm einen Iterator vom gewünschten Typ holen, um damit zu arbeiten.</p>
<p>Ich habe eine funktioniernde Methode, um die Objekte zu casten, aber ein Iterator wäre ganz nett.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1742363</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1742363</guid><dc:creator><![CDATA[pewpy]]></dc:creator><pubDate>Mon, 13 Jul 2009 19:32:49 GMT</pubDate></item><item><title><![CDATA[Reply to Kann ich einen vector::iterator in einen anderen konvertieren? on Mon, 13 Jul 2009 19:42:03 GMT]]></title><description><![CDATA[<p>Nochmals, <em>wieso</em> brauchst du einen Iterator, der auf einen anderen Elementtyp zeigt als der Elementtyp des Container? Um anders darauf zuzugreifen?</p>
<p>Wieso überhaupt casten? Geht es um Zeiger (Polymorphie)? Wäre es da nicht besser, du würdest mit virtuellen Funktionen arbeiten?</p>
<p>Etwas genauere Informationen wären schon noch hilfreich...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1742368</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1742368</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 13 Jul 2009 19:42:03 GMT</pubDate></item><item><title><![CDATA[Reply to Kann ich einen vector::iterator in einen anderen konvertieren? on Mon, 13 Jul 2009 20:26:25 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>also sehr wahrscheinlich bin ich auf dem falschen Dampfer:</p>
<p>Die abgeleiteten Objekte besitzen Eigenschaften, die in der Basisklasse nicht vorkommen.</p>
<p>Ich kann über den Iterator mit dem Typen des Containers nicht auf diese Eigenschaften zugreifen.</p>
<p>Der Grund, weshalb ich das einbauen möchte ist, dass ich mit einem Kurs an der Uni ein Spiel programmiere und eine Person unbedingt einen Iterator will, um die Liste der Spielobjekte zu durchlaufen (um einen fertigen Code einzubauen :()</p>
<p>edit: ich hab der Person nun empfohlen, eine seperate Liste zu führen, da ich es leid war <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_savoring_food"
      title=":yum:"
      alt="😋"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1742385</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1742385</guid><dc:creator><![CDATA[pewpy]]></dc:creator><pubDate>Mon, 13 Jul 2009 20:26:25 GMT</pubDate></item><item><title><![CDATA[Reply to Kann ich einen vector::iterator in einen anderen konvertieren? on Tue, 14 Jul 2009 07:51:57 GMT]]></title><description><![CDATA[<p>In den Containern sind doch Zeiger. Dann musst du doch nicht den Iterator casten, sondern das Object auf das der Iterator zeigt. Das ist problemlos möglich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1742523</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1742523</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Tue, 14 Jul 2009 07:51:57 GMT</pubDate></item><item><title><![CDATA[Reply to Kann ich einen vector::iterator in einen anderen konvertieren? on Tue, 14 Jul 2009 12:42:33 GMT]]></title><description><![CDATA[<p>Braunstein schrieb:</p>
<blockquote>
<p>In den Containern sind doch Zeiger. Dann musst du doch nicht den Iterator casten, sondern das Object auf das der Iterator zeigt. Das ist problemlos möglich.</p>
</blockquote>
<p>Ich glaube, er wollte ohne zusätzlichen Aufwand normal über den Container iterieren, sodass er jeweils gecastete Elemente erhält.</p>
<p>Hier mal ein kleiner Vorschlag. Ich habe den nativen Iterator gewrappt und durch einen ersetzt, der bei der Dereferenzierung automatisch castet. Du solltest dich allerdings mit Templates und Klassen gut auskennen, sonst wirst du Verständnisprobleme haben.</p>
<pre><code class="language-cpp">template &lt;typename DestT, typename SourceT&gt;
class cast_iterator
{
	private:
		typedef typename std::vector&lt;SourceT*&gt;::iterator iter_t;
		typedef cast_iterator&lt;DestT,SourceT&gt; cast_iter_t;

	public:
		cast_iterator(iter_t iter)
		: m_iter(iter)
		{
		}

		cast_iter_t&amp; operator++()
		{
			++m_iter;
			return *this;
		}

		DestT&amp; operator*()
		{
			return *static_cast&lt;DestT*&gt;(*m_iter);
		}

		DestT* operator-&gt;()
		{
			return static_cast&lt;DestT*&gt;(*m_iter.operator-&gt;());
		}

		friend bool operator!= (const cast_iter_t&amp; lhs, const cast_iter_t&amp; rhs)
		{
			return lhs.m_iter != rhs.m_iter;
		}

	private:
		iter_t m_iter;
};
</code></pre>
<p>Anwendung:</p>
<pre><code class="language-cpp">struct A
{
    void func();
};

struct B : public A
{
    void func();
};

int main()
{
    std::vector&lt;A*&gt; v; // mit Zeigern auf B-Objekte füllen
    for (cast_iterator&lt;B, A&gt; i = v.begin(); i != v.end(); ++i)
    {
    	i-&gt;func(); // ruft B::func auf
         B&amp; b = *i; // Referenz auf B-Objekt
    }
}
</code></pre>
<p>Natürlich musst du hier noch einiges erweitern, um z.B. mit <code>const_iterator</code> kompatibel zu sein. Viele Operatoren fehlen zudem noch. Ich habe mein Beispiel auf <code>std::vector</code> beschränkt, mit zusätzlichen Templateparametern könnte man auch das verallgemeinern. Mein Code sollte nur mal als Anregung dienen, falls du interessiert bist und dich auch mit Theorie beschäftigst, sollte der Rest kein Problem sein. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1742746</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1742746</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 14 Jul 2009 12:42:33 GMT</pubDate></item><item><title><![CDATA[Reply to Kann ich einen vector::iterator in einen anderen konvertieren? on Tue, 14 Jul 2009 20:01:50 GMT]]></title><description><![CDATA[<p>Hey super, Nexus!</p>
<p>Danke dir vielmals für deine Mühen.</p>
<p>Template Funktionen sind mir vertraut, aber ich muss mir deinen Code nochmal genauer ansehen, um alles zu verstehen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1743066</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1743066</guid><dc:creator><![CDATA[pewpy]]></dc:creator><pubDate>Tue, 14 Jul 2009 20:01:50 GMT</pubDate></item><item><title><![CDATA[Reply to Kann ich einen vector::iterator in einen anderen konvertieren? on Tue, 14 Jul 2009 23:40:38 GMT]]></title><description><![CDATA[<p>Kein Problem. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Ich hoffe, das hilft dir ein wenig, stelle bei Bedarf einfach wieder Fragen (zum Beispiel, wenn dir Teile meines Codes nicht ganz einleuchten).</p>
<p>Die <code>friend</code> -Funktionsdefinition mag dir vielleicht nicht ganz vertraut sein, ich hab das der Einfachheit halber so gelöst. Das kommt einer globalen Funktion (bzw. einem Funktionstemplate) gleich, die ein <code>friend</code> der Klasse ist und somit auf die Member zugreifen darf.</p>
<p>Falls du die Operatorüberladung nicht ganz nachvollziehen kannst, gibts einen sehr schönen <a href="http://magazin.c-plusplus.net/artikel/%DCberladung%20von%20Operatoren%20in%20CPlusPlus%20%28Teil%201%29" rel="nofollow">Artikel</a> von pumuckl. Gerade <code>operator-&gt;</code> ist etwas speziell, wenn man ihn das erste Mal sieht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1743160</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1743160</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 14 Jul 2009 23:40:38 GMT</pubDate></item></channel></rss>