<?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[link problem bei Templates]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich habe folgende Situation:</p>
<p>2 Klassen, A und B sind gegeben. Klasse A enthält eine Liste von zeigern auf B. In B wiederum ist eine Liste von Zeigern auf C (hier int) gegeben. Mein Wunsch ist es jetzt, in A einen Iterator so zu definieren, dass über alle in allen B vorhanden C's iteriert werden kann.</p>
<p>Hier erstmal die Klassen A, B</p>
<pre><code class="language-cpp">class B
{
public:
  std::list&lt;int*&gt; t;
};

class A
{
public:
  std::list&lt;B*&gt; l;

  typedef doubleIterator&lt;A, B, int, std::list&lt;B*&gt;, std::list&lt;int*&gt;&gt; iter;

  iter _begin(void) const { return iter(this, l.begin()); }
  iter _end(void) const { return iter(this, l.end()); }
};
</code></pre>
<p>Mein Iterator funktioniert auch eigentlich einwandfrei, außer dass beim linken der Operator == nicht gefunden wird, wenn ich ihn nicht als Member-Funktion definiere. Hier einmal den Ausschnitt, der den Fehler noch enthält:</p>
<pre><code class="language-cpp">#include &lt;list&gt;  

template&lt;class TA, class TB, class TC, 
  class Cont1 = std::list&lt;TB*&gt;, 
  class Cont2 = std::list&lt;TC*&gt; &gt;
class doubleIterator : public std::iterator_traits&lt;typename Cont2::const_iterator&gt;
{
public:
  typedef typename Cont1::const_iterator iterA;
  typedef typename Cont2::const_iterator iterB;

  inline doubleIterator(const TA* a, iterA ia) {}

private:
  const TA* _a;
  iterA _ia;
  iterB _ib;
  bool bInit;

public:
  friend bool operator==(const doubleIterator&amp; a, const doubleIterator&amp; b);
};

template&lt;class TA, class TB, class TC, class Cont1, class Cont2&gt;
bool 
operator==(const doubleIterator&lt;TA, TB, TC, Cont1, Cont2&gt;&amp; a,
           const doubleIterator&lt;TA, TB, TC, Cont1, Cont2&gt;&amp; b)
{
  return true; //hier steht was länglicheres ;)
}
</code></pre>
<p>Beim Kompilieren von folgendem Testprogramm</p>
<pre><code class="language-cpp">int main(int, char**)
{
  A a;

  A::iter i = a._begin();

  if (i == a._end())
  {
  }
}
</code></pre>
<p>bekomm ich folgenden Fehler:</p>
<blockquote>
<p>1&gt;main.obj : error LNK2019: unresolved external symbol &quot;bool __cdecl operator==(class doubleIterator&lt;class A,class B,int,class std::list&lt;class B *,class std::allocator&lt;class B *&gt; &gt;,class std::list&lt;int *,class std::allocator&lt;int *&gt; &gt; &gt; const &amp;,class doubleIterator&lt;class A,class B,int,class std::list&lt;class B *,class std::allocator&lt;class B *&gt; &gt;,class std::list&lt;int *,class std::allocator&lt;int *&gt; &gt; &gt; const &amp;)&quot; (??8@YA_NABV?<span class="katex"><span class="katex-mathml"><math><semantics><mrow><mi>d</mi><mi>o</mi><mi>u</mi><mi>b</mi><mi>l</mi><mi>e</mi><mi>I</mi><mi>t</mi><mi>e</mi><mi>r</mi><mi>a</mi><mi>t</mi><mi>o</mi><mi>r</mi><mi mathvariant="normal">@</mi><mi>V</mi><mi>A</mi><mi mathvariant="normal">@</mi><mi mathvariant="normal">@</mi><mi>V</mi><mi>B</mi><mi mathvariant="normal">@</mi><mi mathvariant="normal">@</mi><mi>H</mi><mi>V</mi><mo>?</mo></mrow><annotation encoding="application/x-tex">doubleIterator@VA@@VB@@HV?</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="strut" style="height:0.69444em;"></span><span class="strut bottom" style="height:0.69444em;vertical-align:0em;"></span><span class="base textstyle uncramped"><span class="mord mathit">d</span><span class="mord mathit">o</span><span class="mord mathit">u</span><span class="mord mathit">b</span><span class="mord mathit" style="margin-right:0.01968em;">l</span><span class="mord mathit">e</span><span class="mord mathit" style="margin-right:0.07847em;">I</span><span class="mord mathit">t</span><span class="mord mathit">e</span><span class="mord mathit" style="margin-right:0.02778em;">r</span><span class="mord mathit">a</span><span class="mord mathit">t</span><span class="mord mathit">o</span><span class="mord mathit" style="margin-right:0.02778em;">r</span><span class="mord mathrm">@</span><span class="mord mathit" style="margin-right:0.22222em;">V</span><span class="mord mathit">A</span><span class="mord mathrm">@</span><span class="mord mathrm">@</span><span class="mord mathit" style="margin-right:0.22222em;">V</span><span class="mord mathit" style="margin-right:0.05017em;">B</span><span class="mord mathrm">@</span><span class="mord mathrm">@</span><span class="mord mathit" style="margin-right:0.08125em;">H</span><span class="mord mathit" style="margin-right:0.22222em;">V</span><span class="mclose">?</span></span></span></span>list@PAVB@@V?<span class="katex"><span class="katex-mathml"><math><semantics><mrow><mi>a</mi><mi>l</mi><mi>l</mi><mi>o</mi><mi>c</mi><mi>a</mi><mi>t</mi><mi>o</mi><mi>r</mi><mi mathvariant="normal">@</mi><mi>P</mi><mi>A</mi><mi>V</mi><mi>B</mi><mi mathvariant="normal">@</mi><mi mathvariant="normal">@</mi><mi mathvariant="normal">@</mi><mi>s</mi><mi>t</mi><mi>d</mi><mi mathvariant="normal">@</mi><mi mathvariant="normal">@</mi><mi mathvariant="normal">@</mi><mi>s</mi><mi>t</mi><mi>d</mi><mi mathvariant="normal">@</mi><mi mathvariant="normal">@</mi><mi>V</mi><mo>?</mo></mrow><annotation encoding="application/x-tex">allocator@PAVB@@@std@@@std@@V?</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="strut" style="height:0.69444em;"></span><span class="strut bottom" style="height:0.69444em;vertical-align:0em;"></span><span class="base textstyle uncramped"><span class="mord mathit">a</span><span class="mord mathit" style="margin-right:0.01968em;">l</span><span class="mord mathit" style="margin-right:0.01968em;">l</span><span class="mord mathit">o</span><span class="mord mathit">c</span><span class="mord mathit">a</span><span class="mord mathit">t</span><span class="mord mathit">o</span><span class="mord mathit" style="margin-right:0.02778em;">r</span><span class="mord mathrm">@</span><span class="mord mathit" style="margin-right:0.13889em;">P</span><span class="mord mathit">A</span><span class="mord mathit" style="margin-right:0.22222em;">V</span><span class="mord mathit" style="margin-right:0.05017em;">B</span><span class="mord mathrm">@</span><span class="mord mathrm">@</span><span class="mord mathrm">@</span><span class="mord mathit">s</span><span class="mord mathit">t</span><span class="mord mathit">d</span><span class="mord mathrm">@</span><span class="mord mathrm">@</span><span class="mord mathrm">@</span><span class="mord mathit">s</span><span class="mord mathit">t</span><span class="mord mathit">d</span><span class="mord mathrm">@</span><span class="mord mathrm">@</span><span class="mord mathit" style="margin-right:0.22222em;">V</span><span class="mclose">?</span></span></span></span>list@PAHV?$allocator@PAH@std@@@4@@@0@Z) referenced in function _main</p>
</blockquote>
<p>Ich benutze Visual Studio 2005 (Professional) - Sollte das irgendwie zur Problemlösung helfen.</p>
<p>Ich habe schon versucht, mit</p>
<pre><code class="language-cpp">template&lt;&gt; bool operator==&lt;A, B, int, std::list&lt;B*&gt;, std::list&lt;int*&gt; &gt;(const doubleIterator&lt;A, B, int, std::list&lt;B*&gt;, std::list&lt;int*&gt; &gt;&amp; a,
           const doubleIterator&lt;A, B, int, std::list&lt;B*&gt;, std::list&lt;int*&gt; &gt;&amp; b);
</code></pre>
<p>eine Instantierung des Templates zu erzwingen, jedoch führte dies leider auch nicht zum Erfolg.</p>
<p>Alle MemberFunktionen werden korrekt instantiiert, sprich, wenn ich operator== als Member-Funktion machen, funktiniert alles ... Jedoch hätte ich es gerne als externe Funktion.</p>
<p>Vielen Dank für Hilfe schonmal im vor raus. (Wieso wird vor raus (zusammengeschrieben) zensiert ...)</p>
<p>mfg Thorondir</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/271828/link-problem-bei-templates</link><generator>RSS for Node</generator><lastBuildDate>Sat, 29 Aug 2026 06:10:35 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/271828.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 04 Aug 2010 14:48:51 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to link problem bei Templates on Wed, 04 Aug 2010 14:48:51 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich habe folgende Situation:</p>
<p>2 Klassen, A und B sind gegeben. Klasse A enthält eine Liste von zeigern auf B. In B wiederum ist eine Liste von Zeigern auf C (hier int) gegeben. Mein Wunsch ist es jetzt, in A einen Iterator so zu definieren, dass über alle in allen B vorhanden C's iteriert werden kann.</p>
<p>Hier erstmal die Klassen A, B</p>
<pre><code class="language-cpp">class B
{
public:
  std::list&lt;int*&gt; t;
};

class A
{
public:
  std::list&lt;B*&gt; l;

  typedef doubleIterator&lt;A, B, int, std::list&lt;B*&gt;, std::list&lt;int*&gt;&gt; iter;

  iter _begin(void) const { return iter(this, l.begin()); }
  iter _end(void) const { return iter(this, l.end()); }
};
</code></pre>
<p>Mein Iterator funktioniert auch eigentlich einwandfrei, außer dass beim linken der Operator == nicht gefunden wird, wenn ich ihn nicht als Member-Funktion definiere. Hier einmal den Ausschnitt, der den Fehler noch enthält:</p>
<pre><code class="language-cpp">#include &lt;list&gt;  

template&lt;class TA, class TB, class TC, 
  class Cont1 = std::list&lt;TB*&gt;, 
  class Cont2 = std::list&lt;TC*&gt; &gt;
class doubleIterator : public std::iterator_traits&lt;typename Cont2::const_iterator&gt;
{
public:
  typedef typename Cont1::const_iterator iterA;
  typedef typename Cont2::const_iterator iterB;

  inline doubleIterator(const TA* a, iterA ia) {}

private:
  const TA* _a;
  iterA _ia;
  iterB _ib;
  bool bInit;

public:
  friend bool operator==(const doubleIterator&amp; a, const doubleIterator&amp; b);
};

template&lt;class TA, class TB, class TC, class Cont1, class Cont2&gt;
bool 
operator==(const doubleIterator&lt;TA, TB, TC, Cont1, Cont2&gt;&amp; a,
           const doubleIterator&lt;TA, TB, TC, Cont1, Cont2&gt;&amp; b)
{
  return true; //hier steht was länglicheres ;)
}
</code></pre>
<p>Beim Kompilieren von folgendem Testprogramm</p>
<pre><code class="language-cpp">int main(int, char**)
{
  A a;

  A::iter i = a._begin();

  if (i == a._end())
  {
  }
}
</code></pre>
<p>bekomm ich folgenden Fehler:</p>
<blockquote>
<p>1&gt;main.obj : error LNK2019: unresolved external symbol &quot;bool __cdecl operator==(class doubleIterator&lt;class A,class B,int,class std::list&lt;class B *,class std::allocator&lt;class B *&gt; &gt;,class std::list&lt;int *,class std::allocator&lt;int *&gt; &gt; &gt; const &amp;,class doubleIterator&lt;class A,class B,int,class std::list&lt;class B *,class std::allocator&lt;class B *&gt; &gt;,class std::list&lt;int *,class std::allocator&lt;int *&gt; &gt; &gt; const &amp;)&quot; (??8@YA_NABV?<span class="katex"><span class="katex-mathml"><math><semantics><mrow><mi>d</mi><mi>o</mi><mi>u</mi><mi>b</mi><mi>l</mi><mi>e</mi><mi>I</mi><mi>t</mi><mi>e</mi><mi>r</mi><mi>a</mi><mi>t</mi><mi>o</mi><mi>r</mi><mi mathvariant="normal">@</mi><mi>V</mi><mi>A</mi><mi mathvariant="normal">@</mi><mi mathvariant="normal">@</mi><mi>V</mi><mi>B</mi><mi mathvariant="normal">@</mi><mi mathvariant="normal">@</mi><mi>H</mi><mi>V</mi><mo>?</mo></mrow><annotation encoding="application/x-tex">doubleIterator@VA@@VB@@HV?</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="strut" style="height:0.69444em;"></span><span class="strut bottom" style="height:0.69444em;vertical-align:0em;"></span><span class="base textstyle uncramped"><span class="mord mathit">d</span><span class="mord mathit">o</span><span class="mord mathit">u</span><span class="mord mathit">b</span><span class="mord mathit" style="margin-right:0.01968em;">l</span><span class="mord mathit">e</span><span class="mord mathit" style="margin-right:0.07847em;">I</span><span class="mord mathit">t</span><span class="mord mathit">e</span><span class="mord mathit" style="margin-right:0.02778em;">r</span><span class="mord mathit">a</span><span class="mord mathit">t</span><span class="mord mathit">o</span><span class="mord mathit" style="margin-right:0.02778em;">r</span><span class="mord mathrm">@</span><span class="mord mathit" style="margin-right:0.22222em;">V</span><span class="mord mathit">A</span><span class="mord mathrm">@</span><span class="mord mathrm">@</span><span class="mord mathit" style="margin-right:0.22222em;">V</span><span class="mord mathit" style="margin-right:0.05017em;">B</span><span class="mord mathrm">@</span><span class="mord mathrm">@</span><span class="mord mathit" style="margin-right:0.08125em;">H</span><span class="mord mathit" style="margin-right:0.22222em;">V</span><span class="mclose">?</span></span></span></span>list@PAVB@@V?<span class="katex"><span class="katex-mathml"><math><semantics><mrow><mi>a</mi><mi>l</mi><mi>l</mi><mi>o</mi><mi>c</mi><mi>a</mi><mi>t</mi><mi>o</mi><mi>r</mi><mi mathvariant="normal">@</mi><mi>P</mi><mi>A</mi><mi>V</mi><mi>B</mi><mi mathvariant="normal">@</mi><mi mathvariant="normal">@</mi><mi mathvariant="normal">@</mi><mi>s</mi><mi>t</mi><mi>d</mi><mi mathvariant="normal">@</mi><mi mathvariant="normal">@</mi><mi mathvariant="normal">@</mi><mi>s</mi><mi>t</mi><mi>d</mi><mi mathvariant="normal">@</mi><mi mathvariant="normal">@</mi><mi>V</mi><mo>?</mo></mrow><annotation encoding="application/x-tex">allocator@PAVB@@@std@@@std@@V?</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="strut" style="height:0.69444em;"></span><span class="strut bottom" style="height:0.69444em;vertical-align:0em;"></span><span class="base textstyle uncramped"><span class="mord mathit">a</span><span class="mord mathit" style="margin-right:0.01968em;">l</span><span class="mord mathit" style="margin-right:0.01968em;">l</span><span class="mord mathit">o</span><span class="mord mathit">c</span><span class="mord mathit">a</span><span class="mord mathit">t</span><span class="mord mathit">o</span><span class="mord mathit" style="margin-right:0.02778em;">r</span><span class="mord mathrm">@</span><span class="mord mathit" style="margin-right:0.13889em;">P</span><span class="mord mathit">A</span><span class="mord mathit" style="margin-right:0.22222em;">V</span><span class="mord mathit" style="margin-right:0.05017em;">B</span><span class="mord mathrm">@</span><span class="mord mathrm">@</span><span class="mord mathrm">@</span><span class="mord mathit">s</span><span class="mord mathit">t</span><span class="mord mathit">d</span><span class="mord mathrm">@</span><span class="mord mathrm">@</span><span class="mord mathrm">@</span><span class="mord mathit">s</span><span class="mord mathit">t</span><span class="mord mathit">d</span><span class="mord mathrm">@</span><span class="mord mathrm">@</span><span class="mord mathit" style="margin-right:0.22222em;">V</span><span class="mclose">?</span></span></span></span>list@PAHV?$allocator@PAH@std@@@4@@@0@Z) referenced in function _main</p>
</blockquote>
<p>Ich benutze Visual Studio 2005 (Professional) - Sollte das irgendwie zur Problemlösung helfen.</p>
<p>Ich habe schon versucht, mit</p>
<pre><code class="language-cpp">template&lt;&gt; bool operator==&lt;A, B, int, std::list&lt;B*&gt;, std::list&lt;int*&gt; &gt;(const doubleIterator&lt;A, B, int, std::list&lt;B*&gt;, std::list&lt;int*&gt; &gt;&amp; a,
           const doubleIterator&lt;A, B, int, std::list&lt;B*&gt;, std::list&lt;int*&gt; &gt;&amp; b);
</code></pre>
<p>eine Instantierung des Templates zu erzwingen, jedoch führte dies leider auch nicht zum Erfolg.</p>
<p>Alle MemberFunktionen werden korrekt instantiiert, sprich, wenn ich operator== als Member-Funktion machen, funktiniert alles ... Jedoch hätte ich es gerne als externe Funktion.</p>
<p>Vielen Dank für Hilfe schonmal im vor raus. (Wieso wird vor raus (zusammengeschrieben) zensiert ...)</p>
<p>mfg Thorondir</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1936166</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1936166</guid><dc:creator><![CDATA[thorondir]]></dc:creator><pubDate>Wed, 04 Aug 2010 14:48:51 GMT</pubDate></item><item><title><![CDATA[Reply to link problem bei Templates on Wed, 04 Aug 2010 15:22:03 GMT]]></title><description><![CDATA[<p>EDIT: Ich nehm alles zurück. War falsch, was ich geschrieben hab...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1936183</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1936183</guid><dc:creator><![CDATA[Jochen S.]]></dc:creator><pubDate>Wed, 04 Aug 2010 15:22:03 GMT</pubDate></item><item><title><![CDATA[Reply to link problem bei Templates on Wed, 04 Aug 2010 15:25:27 GMT]]></title><description><![CDATA[<p>In dem Beispiel-programm oben steht alles in einer einzelnen Datei drin - daran sollte es nicht liegen - Macht ja jetzt keinen Unterschied, ob ich den kram in eine header datei schreibe und dann einbinde oder direkt in die (gleiche) Cpp-Datei schreibe.</p>
<p>@voraus: Falsch geschrieben ist es, aber es sollte deswegen trozdem nicht zensiert werden <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/1936187</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1936187</guid><dc:creator><![CDATA[thorondir]]></dc:creator><pubDate>Wed, 04 Aug 2010 15:25:27 GMT</pubDate></item><item><title><![CDATA[Reply to link problem bei Templates on Wed, 04 Aug 2010 15:43:33 GMT]]></title><description><![CDATA[<p>Ich habe noch was rumprobiert: Es scheint mit dem friend zusammenzuhängen, denn:</p>
<pre><code class="language-cpp">#include &lt;list&gt;  

template&lt;class TC, class Cont1&gt;
class doubleIterator 
{
public:
  /* auskommentieren, und alles klappt ... */
  friend bool foo(const doubleIterator&amp; a, const doubleIterator&amp; b);
};

template&lt;class TC, class Cont1&gt;
bool foo(const doubleIterator&lt;TC, Cont1&gt;&amp; a, const doubleIterator&lt;TC, Cont1&gt;&amp; b)
{
  return true;
}

class A
{
public:
  std::list&lt;int*&gt; l;

  typedef doubleIterator&lt;int, std::list&lt;int*&gt; &gt; iter;

  iter _end(void) const { return iter(); }
};

int main(int, char**)
{
  A a;

  if (foo(a._end(), a._end()))
  {
  }

}
</code></pre>
<p>Wenn ich das friend rausnehme, kompiliert das Beispiel, wenns drin ist, findet er die Funktion nicht ...</p>
<p>Ah, beim weiterherum probieren beim schreiben hats dann auch funktioniert:</p>
<pre><code class="language-cpp">template&lt;class TC, class Cont1&gt;
class doubleIterator 
{
public:
  /* auskommentieren, und alles klappt ... */
  template&lt;class _TC, class _Cont1&gt;
  friend bool foo(const doubleIterator&lt;_TC, _Cont1&gt;&amp; a, const doubleIterator&lt;_TC, _Cont1&gt;&amp; b);
};
</code></pre>
<p>Damit kompiliert es, für alle die eine Lösung haben wollen ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1936193</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1936193</guid><dc:creator><![CDATA[thorondir]]></dc:creator><pubDate>Wed, 04 Aug 2010 15:43:33 GMT</pubDate></item><item><title><![CDATA[Reply to link problem bei Templates on Wed, 04 Aug 2010 16:57:58 GMT]]></title><description><![CDATA[<p>was genau kann dein doubleIterator denn eigtl? Oo<br />
In deinem Quellcode hast du ja (sinnigerweise) alles unnötige rausgelassen - aber was genau sprach hier denn gegen einen normalen Iterator?<br />
(und wenn wir schon mal dabei sind: wieso eine list&lt;int*&gt;? mir fällt hier genau ein vorteil auf: die iteratoren bleiben gültig, auch wenn du drin rum löschst/verschiebst - ansonsten sollte es aber um ein vielfaches langsamer sein...)</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1936235</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1936235</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Wed, 04 Aug 2010 16:57:58 GMT</pubDate></item><item><title><![CDATA[Reply to link problem bei Templates on Wed, 04 Aug 2010 17:51:37 GMT]]></title><description><![CDATA[<p>int* ist nur zum Testen.</p>
<p>Eigentlich sind in der Liste Zeiger auf einen anderen Datentyp drin.</p>
<p>Das sieht ungefähr halt so aus:</p>
<pre><code class="language-cpp">class C
{
};

class B
{
std::list&lt;C*&gt; l;
};

class A
{
std::list&lt;B*&gt; l;
typedef ... iterator;
iterator begin() ...
iterator end() ...
}
</code></pre>
<p>Der Iterator soll dabei dann halt über alle Elemente C iterieren, die halt auf die Klassen B aufgeteilt sind. Die Klassen B sind halt notwendig und versorgen jeweils eine bestimmte Anzahl von C, jedoch ist es ganz nett, wenn man sich alle C, die irgendwie über ein B in A verlinkt sind, auf einmal (mit einem Iterator) ansehen kann - und das kann der doubleIterator.</p>
<p>list ist auch nicht unbedingt benötigt, im Endeffekt kann der, so wie ich ihn programmiert habe, auf alle Container angewandt werden, die Iteratoren besitzen -- nur das ist halt etwas unübersichtlich wegen der ganzen dafür benötigten template parameter:</p>
<pre><code class="language-cpp">template&lt;class TA, class TB, class TC, // Die 3 Klassen A, B und C
  class Cont1 = std::list&lt;TB*&gt;, // Container 1 in Klasse A mit Zeigern auf B
  class Cont2 = std::list&lt;TC*&gt;, // Container 2 in Klasse B mit Zeigern auf C
    typename Cont1::const_iterator (TA::*faEnd) (void) const = &amp;TA::end, // gibt das Ende von Container 1 zurück
    typename Cont2::const_iterator (TB::*fbBegin)(void) const = &amp;TB::begin, // gibt den Anfang von Container 2 für ein Element zurück
    typename Cont2::const_iterator (TB::*fbEnd)(void) const = &amp;TB::end&gt; // gibt das Ende von Container 2 zurück
  class doubleIterator : public std::iterator_traits&lt;typename Cont2::const_iterator&gt;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1936253</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1936253</guid><dc:creator><![CDATA[thorondir]]></dc:creator><pubDate>Wed, 04 Aug 2010 17:51:37 GMT</pubDate></item></channel></rss>