<?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[Vererbung &amp;amp; Templateklassen]]></title><description><![CDATA[<p>hi,</p>
<p>Warum ist in folgendem Code der Scope-Operator notwendig? Eigenltich ist doch eindeutig woher obj kommt, oder nicht? Wenn man die Klasse A weglässt, dann funktionierts komischerweise auch ohne den Scope Operator.</p>
<pre><code class="language-cpp">template &lt;typename O&gt;
class OT
{
  public:
    void something(){/*bla*/}
};

class A{};

template &lt;typename I, typename O&gt;
class B : public A {
  public:
      OT&lt;O&gt; *obj;
};

template &lt;typename O&gt;
class B&lt;void, O&gt; : public A {
  public:
      OT&lt;O&gt; *obj;
};

template &lt;typename O&gt;
class C : public B&lt;void, O&gt; {
  public:
      void function() {
        //Hier muss B&lt;void, O&gt;::obj-&gt;something() stehen
        obj-&gt;something();
      }
};
</code></pre>
<p>Der Code ist nicht von mir, also beschwert euch auch nicht, dass man obj in A packen könnte (dann funktionierts auch ohne scope-Operator). :p</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/158046/vererbung-amp-templateklassen</link><generator>RSS for Node</generator><lastBuildDate>Wed, 09 Sep 2026 13:38:16 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/158046.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 31 Aug 2006 19:51:58 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Vererbung &amp;amp; Templateklassen on Thu, 31 Aug 2006 19:51:58 GMT]]></title><description><![CDATA[<p>hi,</p>
<p>Warum ist in folgendem Code der Scope-Operator notwendig? Eigenltich ist doch eindeutig woher obj kommt, oder nicht? Wenn man die Klasse A weglässt, dann funktionierts komischerweise auch ohne den Scope Operator.</p>
<pre><code class="language-cpp">template &lt;typename O&gt;
class OT
{
  public:
    void something(){/*bla*/}
};

class A{};

template &lt;typename I, typename O&gt;
class B : public A {
  public:
      OT&lt;O&gt; *obj;
};

template &lt;typename O&gt;
class B&lt;void, O&gt; : public A {
  public:
      OT&lt;O&gt; *obj;
};

template &lt;typename O&gt;
class C : public B&lt;void, O&gt; {
  public:
      void function() {
        //Hier muss B&lt;void, O&gt;::obj-&gt;something() stehen
        obj-&gt;something();
      }
};
</code></pre>
<p>Der Code ist nicht von mir, also beschwert euch auch nicht, dass man obj in A packen könnte (dann funktionierts auch ohne scope-Operator). :p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1128706</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1128706</guid><dc:creator><![CDATA[bluecode]]></dc:creator><pubDate>Thu, 31 Aug 2006 19:51:58 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung &amp;amp; Templateklassen on Thu, 31 Aug 2006 20:05:00 GMT]]></title><description><![CDATA[<p>bluecode schrieb:</p>
<blockquote>
<p>..., dass man obj in A packen könnte (dann funktionierts auch ohne scope-Operator). :p</p>
</blockquote>
<p>nein. abhängige basisklassen werden beim unqualifizierten lookup nicht durchsucht. es ist eben überhaupt nicht klar, das obj ein member der basis B&lt;void, O&gt; ist. das kann erst bei der instantiierung entschieden werden. für zwecke des namelookups ist es auch völlig unerheblich, ob das basisklassentemplate (und evtl. irgendwelche spezialisierungen) bereits definiert wurde.</p>
<p>was wäre denn z.b., wenn wir <em>nach</em> der definition des templates C noch folgende spezialisierung einführen:</p>
<pre><code class="language-cpp">template &lt;typename O&gt;
class B&lt;void, O*&gt; {
public:
    typedef void obj;
};
</code></pre>
<p>ist doch klar, dass obj ein member der basisklasse ist, bzw. in A gefunden wird? wohl kaum...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1128710</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1128710</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 31 Aug 2006 20:05:00 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung &amp;amp; Templateklassen on Thu, 31 Aug 2006 20:19:20 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>bluecode schrieb:</p>
<blockquote>
<p>..., dass man obj in A packen könnte (dann funktionierts auch ohne scope-Operator). :p</p>
</blockquote>
<p>nein. abhängige basisklassen werden beim unqualifizierten lookup nicht durchsucht. es ist eben überhaupt nicht klar, das obj ein member der basis B&lt;void, O&gt; ist. das kann erst bei der instantiierung entschieden werden. für zwecke des namelookups ist es auch völlig unerheblich, ob das basisklassentemplate (und evtl. irgendwelche spezialisierungen) bereits definiert wurde.</p>
</blockquote>
<p>Hast recht. War mein Fehler... habs mit dem g++ 3.3.6 versucht und damit ging sogar auch die gepostete Variante. Habs jetzt nochmal mit g++ 4.1.1 versucht und damit geht beides nicht.</p>
<p>Kann man dann sagen, dass man, wenn man eine Klasse (egal ob die nun template is oder nicht) von nem template ableitet, dass man immer den scope operator braucht? Das scheint dann wohl ein bug im alten g++ (3.3.6) zu sein...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1128715</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1128715</guid><dc:creator><![CDATA[bluecode]]></dc:creator><pubDate>Thu, 31 Aug 2006 20:19:20 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung &amp;amp; Templateklassen on Thu, 31 Aug 2006 20:31:40 GMT]]></title><description><![CDATA[<p>du kannst nicht von templates ableiten, nur von klassen <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="😉"
    /><br />
wenn du eine normale klasse von einer templateklasse ableitest, stehen die paramter des basisklassentemplates fest, und die üblichen regeln für namelookup sind in kraft. der begriff &quot;abhängig&quot; stellt ja gerade auf die parameter des zu definierenden templates ab - eine normale klasse hat soetwas nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1128720</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1128720</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 31 Aug 2006 20:31:40 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung &amp;amp; Templateklassen on Fri, 01 Sep 2006 20:15:06 GMT]]></title><description><![CDATA[<p>Danke, hat mich zwar einige Zeit zum Überlegen gekostet, aber ich glaub jetzt hab ichs einigermaßen verstanden. <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="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1129374</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1129374</guid><dc:creator><![CDATA[bluecode]]></dc:creator><pubDate>Fri, 01 Sep 2006 20:15:06 GMT</pubDate></item></channel></rss>