<?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[Template-Methode aus Template-Methode aufrufen]]></title><description><![CDATA[<p>Hi zusammen</p>
<p>Kurze Frage bezüchglich folgender Template-Methode:</p>
<pre><code class="language-cpp">template&lt;class T, class U&gt;
std::vector&lt;boost::shared_ptr&lt;T&gt; &gt; DAO::loadByQuery(const std::string &amp;query) throw(DataAccessException) {
    try {
        dba::SQLIStream is = db-&gt;getIStream();
        T type;
        is.openFromQuery(type, query.c_str());
        return U::loadFromStream&lt;T&gt;(is);
    } catch(const dba::Exception &amp;ex) {
        throw DataAccessException(ex);
    }
}
</code></pre>
<p>Versuche ich, das zu kompilieren, bekommen ich den folgenden Fehler:</p>
<pre><code>/home/user/Software/c++/emc/src/main/include/com/emc/persistence/DAO.inc: In member function ‘std::vector&lt;boost::shared_ptr&lt;X&gt;, std::allocator&lt;boost::shared_ptr&lt;X&gt; &gt; &gt; com::emc::persistence::DAO::load()’:
/home/user/Software/c++/emc/src/main/include/com/emc/persistence/DAO.inc:55: error: expected primary-expression before ‘&gt;’ token
</code></pre>
<p>Der Fehler bezieht sich auf die Zeile mit &quot;U::loadFromStream&lt;T&gt;(is)&quot; . Grundsätzlich geht es darum, dass in in der Oberklasse DAO viele Dinge verallgemeinert werden können (wie z.B. loadByQuery), solange diese Methoden auf eine Template-Methode namens loadFromStream der erbenden Unterklasse zugreifen können. LoadFromStream kann dabei zuweilen sehr spezifisch sein und ist je nach Data Access Object (z.B. UserDAO oder ConsumptionDAO) für diverse Entitätsklassen spezialisiert.</p>
<p>Wären virtuelle Template-Methoden in C++ möglich, hätte ich das selbstverständlich so gelöst. Diese Variante stellt einen kleinen Workaround dar, der nur wenig Zusatzcode verlangen würde - wenn's denn kompilierte <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":-)"
      alt="🙂"
    /> ...</p>
<p>Weiss jemand also, wo im obigen Code der Hund begraben ist?</p>
<p>Thx und greeetz<br />
Kessi</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/248417/template-methode-aus-template-methode-aufrufen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 17 Sep 2026 00:36:18 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/248417.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 24 Aug 2009 15:33:29 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Template-Methode aus Template-Methode aufrufen on Mon, 24 Aug 2009 15:33:29 GMT]]></title><description><![CDATA[<p>Hi zusammen</p>
<p>Kurze Frage bezüchglich folgender Template-Methode:</p>
<pre><code class="language-cpp">template&lt;class T, class U&gt;
std::vector&lt;boost::shared_ptr&lt;T&gt; &gt; DAO::loadByQuery(const std::string &amp;query) throw(DataAccessException) {
    try {
        dba::SQLIStream is = db-&gt;getIStream();
        T type;
        is.openFromQuery(type, query.c_str());
        return U::loadFromStream&lt;T&gt;(is);
    } catch(const dba::Exception &amp;ex) {
        throw DataAccessException(ex);
    }
}
</code></pre>
<p>Versuche ich, das zu kompilieren, bekommen ich den folgenden Fehler:</p>
<pre><code>/home/user/Software/c++/emc/src/main/include/com/emc/persistence/DAO.inc: In member function ‘std::vector&lt;boost::shared_ptr&lt;X&gt;, std::allocator&lt;boost::shared_ptr&lt;X&gt; &gt; &gt; com::emc::persistence::DAO::load()’:
/home/user/Software/c++/emc/src/main/include/com/emc/persistence/DAO.inc:55: error: expected primary-expression before ‘&gt;’ token
</code></pre>
<p>Der Fehler bezieht sich auf die Zeile mit &quot;U::loadFromStream&lt;T&gt;(is)&quot; . Grundsätzlich geht es darum, dass in in der Oberklasse DAO viele Dinge verallgemeinert werden können (wie z.B. loadByQuery), solange diese Methoden auf eine Template-Methode namens loadFromStream der erbenden Unterklasse zugreifen können. LoadFromStream kann dabei zuweilen sehr spezifisch sein und ist je nach Data Access Object (z.B. UserDAO oder ConsumptionDAO) für diverse Entitätsklassen spezialisiert.</p>
<p>Wären virtuelle Template-Methoden in C++ möglich, hätte ich das selbstverständlich so gelöst. Diese Variante stellt einen kleinen Workaround dar, der nur wenig Zusatzcode verlangen würde - wenn's denn kompilierte <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":-)"
      alt="🙂"
    /> ...</p>
<p>Weiss jemand also, wo im obigen Code der Hund begraben ist?</p>
<p>Thx und greeetz<br />
Kessi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1765915</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1765915</guid><dc:creator><![CDATA[Kessi-MC]]></dc:creator><pubDate>Mon, 24 Aug 2009 15:33:29 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Methode aus Template-Methode aufrufen on Mon, 24 Aug 2009 15:38:01 GMT]]></title><description><![CDATA[<p>Da U ein template-Parameter ist, ist U::loadFromStream ein abhängiges Template. Genauso wie Du bei abhängigen Typen typename verwenden musst, musst Du den Compiler hier nochmal sagen, dass loadFromStream ein Template ist:</p>
<pre><code class="language-cpp">return U::template loadFromStream&lt;T&gt;(...)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1765918</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1765918</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Mon, 24 Aug 2009 15:38:01 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Methode aus Template-Methode aufrufen on Mon, 24 Aug 2009 15:43:50 GMT]]></title><description><![CDATA[<p>Schnell, kurz und korrekt! Darum liebe ich euch Leute so <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="😃"
    /> ...</p>
<p>Danke nochmals und Gruss<br />
Kessi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1765920</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1765920</guid><dc:creator><![CDATA[Kessi-MC]]></dc:creator><pubDate>Mon, 24 Aug 2009 15:43:50 GMT</pubDate></item></channel></rss>