<?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[zeiger auf unterschiedliche STL-container in einem array?]]></title><description><![CDATA[<p>Hallo allerseits...</p>
<p>Ich habe hier ein verständnisproblem mit den STL-containern wie &lt;vector&gt; &lt;list&gt; &lt;queue&gt; &lt;deque&gt; &lt;stack&gt; usw. ...<br />
Und zwar verstehe ich nicht, warum sich die entwickler von diesen template-klassen die mühe gegeben haben, all diesen containern dieselbe user-interface zu verpassen (iteratoren gibts überall, begin() end() * ++ usw, mehr brauche ich auch gar nicht...) sie jedoch trotzdem nicht von irgendeinen abstrakten klasse abgeleitet haben?</p>
<p>So sehen die zwar für den benutzer alle gleich aus, und lassen sich auch in den ganzen vordefinierten template-algorithmen auf die gleiche art und weise verwenden, aber die sind, soweit ich das alles richtig verstanden habe, nicht direkt polymorph, d.h. dass ich zB kein array von zeigern auf eine abstrakte &quot;stl_container&quot; klasse anlegen kann, wo ich dann zeiger auf &lt;list&gt; und &lt;vector&gt; gleichzeitig speichern kann.</p>
<p>Wüsste jemand, wie man das geschickt umgehen kann?</p>
<p>Letztendlich ist es mein ziel, irgendwie zeiger auf verschiedene container zu speichern, und sie alle dann auf die gleiche art und weise zu behandeln.</p>
<p>Vielen dank im voraus.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/177550/zeiger-auf-unterschiedliche-stl-container-in-einem-array</link><generator>RSS for Node</generator><lastBuildDate>Thu, 25 Jun 2026 03:38:04 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/177550.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 01 Apr 2007 16:27:22 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to zeiger auf unterschiedliche STL-container in einem array? on Sun, 01 Apr 2007 16:29:25 GMT]]></title><description><![CDATA[<p>Hallo allerseits...</p>
<p>Ich habe hier ein verständnisproblem mit den STL-containern wie &lt;vector&gt; &lt;list&gt; &lt;queue&gt; &lt;deque&gt; &lt;stack&gt; usw. ...<br />
Und zwar verstehe ich nicht, warum sich die entwickler von diesen template-klassen die mühe gegeben haben, all diesen containern dieselbe user-interface zu verpassen (iteratoren gibts überall, begin() end() * ++ usw, mehr brauche ich auch gar nicht...) sie jedoch trotzdem nicht von irgendeinen abstrakten klasse abgeleitet haben?</p>
<p>So sehen die zwar für den benutzer alle gleich aus, und lassen sich auch in den ganzen vordefinierten template-algorithmen auf die gleiche art und weise verwenden, aber die sind, soweit ich das alles richtig verstanden habe, nicht direkt polymorph, d.h. dass ich zB kein array von zeigern auf eine abstrakte &quot;stl_container&quot; klasse anlegen kann, wo ich dann zeiger auf &lt;list&gt; und &lt;vector&gt; gleichzeitig speichern kann.</p>
<p>Wüsste jemand, wie man das geschickt umgehen kann?</p>
<p>Letztendlich ist es mein ziel, irgendwie zeiger auf verschiedene container zu speichern, und sie alle dann auf die gleiche art und weise zu behandeln.</p>
<p>Vielen dank im voraus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1257387</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1257387</guid><dc:creator><![CDATA[Andrey]]></dc:creator><pubDate>Sun, 01 Apr 2007 16:29:25 GMT</pubDate></item><item><title><![CDATA[Reply to zeiger auf unterschiedliche STL-container in einem array? on Sun, 01 Apr 2007 21:34:39 GMT]]></title><description><![CDATA[<p>Kannste nur in ein anderes Objekt kapseln und an das eigentliche Objekt weiterleiten...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1257672</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1257672</guid><dc:creator><![CDATA[Kapseln]]></dc:creator><pubDate>Sun, 01 Apr 2007 21:34:39 GMT</pubDate></item><item><title><![CDATA[Reply to zeiger auf unterschiedliche STL-container in einem array? on Sun, 01 Apr 2007 21:43:15 GMT]]></title><description><![CDATA[<p>Kannst eine Basisklasse schreiben und dann eine Kindklasse welche einen Container als Templateparameter nimmt. Danach musst du das gleiche Spiel dann noch für die Iteratoren machen. (Gibt für die Iteratoren auch etwas fertiges google mal nach &quot;any_iterator&quot; + &quot;Adobe&quot;.)</p>
<p>Den Sinn davon erschließt sich mir aber nicht...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1257675</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1257675</guid><dc:creator><![CDATA[Ben04]]></dc:creator><pubDate>Sun, 01 Apr 2007 21:43:15 GMT</pubDate></item><item><title><![CDATA[Reply to zeiger auf unterschiedliche STL-container in einem array? on Mon, 02 Apr 2007 09:31:46 GMT]]></title><description><![CDATA[<p>Andrey schrieb:</p>
<blockquote>
<p>...die sind, soweit ich das alles richtig verstanden habe, nicht direkt polymorph,...</p>
</blockquote>
<p>Doch !</p>
<p>Allerdings eben per Compilezeitpolymorphie und nicht per Laufzeitzeitpolymorphie ... templates eben. Mit all den Vor- und Nachteilen, die das hat. Allerdings kann man sich die Frage stellen, ob die C++-Standardlib nicht auch &quot;laufzeitpolymorphe Container&quot; hätte zur Verfügung stellen können.</p>
<p>Einen anderen &quot;Trick&quot;, das zu umgehen, habe ich leider auch nicht für Dich.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1257790</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1257790</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 02 Apr 2007 09:31:46 GMT</pubDate></item><item><title><![CDATA[Reply to zeiger auf unterschiedliche STL-container in einem array? on Mon, 02 Apr 2007 11:29:19 GMT]]></title><description><![CDATA[<p>also, danke schon mal für die ideen...</p>
<p>ich habe hier versucht, das was Ben04 vorgeschlagen hat, in einem kleinen beispielprogramm umzusetzen. Folgendes ist dabei rausgekommen:</p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /> Fehlerhaft <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /></p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

//abstract BaseWrapper class as interface for all child classes
class BaseWrapper{
public:
	virtual void saySomething()=0;
};

//template specified wrapper, that can storage pointers of any type
template &lt;class C&gt;
class SpecifiedWrapper : BaseWrapper{
public:
	C* pWrappedObject;

	//constructor
	SpecifiedWrapper(C* pToBeWrapped){
		pWrappedObject=pToBeWrapped;
	}

	void saySomething(){
		pWrappedObject-&gt;saySomething();
	}
};

//this symbolizes the different container classes
class Example1{
public:
	Example1(){};
	void saySomething(){
		std::cout&lt;&lt;&quot;i'm an object of type -1-&quot;;
	}
};

class Example2{
public:
	Example2(){};
	void saySomething(){
		std::cout&lt;&lt;&quot;i'm an object of type -2-&quot;;
	}
};

//array filled with (wrapper-objects)*
BaseWrapper* wrapperArray[10];

//function, that wraps the passed object pointer and adds it to the array
template &lt;class C&gt;
void addWrappedObjectToArray(C* pToBeWrapped, int pos){

	SpecifiedWrapper&lt;C&gt;* pWrapper=new SpecifiedWrapper&lt;C&gt;(pToBeWrapped);
	if(pos&gt;=0 &amp;&amp; pos&lt;10){
		wrapperArray[pos]=pWrapper;	//polymorph!!!
	}
}

int main(){

	Example1 ex1=Example1();
	Example2 ex2=Example2();
	Example1 ex3=Example1();
	//...

	addWrappedObjectToArray(&amp;ex1, 0);
	addWrappedObjectToArray(&amp;ex2, 1);
	addWrappedObjectToArray(&amp;ex3, 2);

	//now look whats in the array...
	(*wrapperArray[0]).saySomething();
	(*wrapperArray[1]).saySomething();
	(*wrapperArray[2]).saySomething();

	return 0;
}
</code></pre>
<p>ja, ich weiß, es ist ein bissl viel und ein bissl finster... Deswegen ein paar erläuterungen:</p>
<p>BaseWrapper ist die basis-hüllen-klasse, die ein einheitliches interface bereitstellen und laufzeitpolymorphie gewährleisten soll. Von der ist dann die template classe SpecifiedWrapper abgeleitet, die eigentlich Zeiger auf alle möglichen objekte speichern kann und die funktion saySomething() realisiert.<br />
Die beiden example-klassen ersetzen im beispiel die container.<br />
Dann gibts noch ein array aus BaseWrapper*-zeigern, wo eigentlich jede beliebige zeiger auf SpecifiedWrapper ebenfalls gespeichert werden dürften (das ist doch der sinn bei der polymorphie, oder liege ich da total falsch?).</p>
<p>Naja... Bei der funktion addWrappedObjectToArray(...){/* ... */} geht dann alles schief... Der compiler spuckt zwei fehler und die meldungen</p>
<blockquote>
<p>Konvertierung von 'class SpecifiedWrapper&lt;class Example1&gt; *' zu 'class BaseWrapper *' existiert bereits, aber es ist kei<br />
n Zugriff darauf moeglich</p>
</blockquote>
<p>und</p>
<blockquote>
<p>Siehe Verweis auf Instantiierung der kompilierten Funktionsvorlage 'void __cdecl addWrappedObjectToArray(class Example1 *,int)'</p>
</blockquote>
<p>aus, aber leider kann ich damit wenig anfangen...<br />
Wäre jemand so nett<br />
a) sich den ganzen mist durchzulesen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
b) mir zu sagen was die fehler heissen, und wodurch die verursacht werden<br />
c) und evtl wie ich sie behebe</p>
<p>Danke schön <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1257850</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1257850</guid><dc:creator><![CDATA[Andrey]]></dc:creator><pubDate>Mon, 02 Apr 2007 11:29:19 GMT</pubDate></item><item><title><![CDATA[Reply to zeiger auf unterschiedliche STL-container in einem array? on Mon, 02 Apr 2007 11:32:11 GMT]]></title><description><![CDATA[<p>Also so ganz kannst du die STL Container nicht unter einen Hut bringen, denn sie sind alle leicht unterschiedlich:<br />
<a href="http://www.linuxsoftware.co.nz/cppcontainers.html" rel="nofollow">http://www.linuxsoftware.co.nz/cppcontainers.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1257855</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1257855</guid><dc:creator><![CDATA[phlox81]]></dc:creator><pubDate>Mon, 02 Apr 2007 11:32:11 GMT</pubDate></item><item><title><![CDATA[Reply to zeiger auf unterschiedliche STL-container in einem array? on Mon, 02 Apr 2007 11:32:39 GMT]]></title><description><![CDATA[<p>*kurz den Text überfliegt* Der Fehler wurde verursacht durch ein fehlendes Wort: &quot;class SpecifiedWrapper : <strong>public</strong> BaseWrapper&quot;. (Zur Erklärung: Wenn du nichts anderes angibst, setzt C++ eine private Ableitung ein, die polymorphend Typumwandlungen funktionieren aber nur entlang öffentlicher Vererbungslinien)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1257857</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1257857</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 02 Apr 2007 11:32:39 GMT</pubDate></item><item><title><![CDATA[Reply to zeiger auf unterschiedliche STL-container in einem array? on Mon, 02 Apr 2007 11:42:20 GMT]]></title><description><![CDATA[<p>phlox81 schrieb:</p>
<blockquote>
<p>Also so ganz kannst du die STL Container nicht unter einen Hut bringen, denn sie sind alle leicht unterschiedlich</p>
</blockquote>
<p>ja, thx, ich weiß, aber ich brauche auch nicht _alle_ eigenschaften von _jedem_ container, sondern im grunde nur die begin() und die end() funktionen bei den nicht-assoziativen containern. (also nicht &lt;map&gt; oder sowas, sondern nur &lt;list&gt; &lt;vector&gt; &lt;queue&gt; &lt;stack&gt; &lt;deque&gt;... + mein eigener array-ähnlicher container, den ich da schreiben will)<br />
Wie ich das allgemein mit all den iteratoren noch hinkriege, werde ich sehen...</p>
<p>CStoll schrieb:</p>
<blockquote>
<p>: <strong>public</strong> BaseWrapper</p>
</blockquote>
<p>okay, danke schön, jetzt klappts wunderbar! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /><br />
im grunde echt n dummer tippfehler von mir... wird sich nicht wiederholen! :p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1257871</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1257871</guid><dc:creator><![CDATA[Andrey]]></dc:creator><pubDate>Mon, 02 Apr 2007 11:42:20 GMT</pubDate></item></channel></rss>