<?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[Lese-Methode mit unbekanntem Template-Parameter als Rückgabe]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe folgendes Problem und weiß nicht, ob es gelöst werden kann.</p>
<p>Ich habe eine Methode, die eine Binärdatei einlesen soll. Die Methode soll eine Instanz einer Template-Klasse zurückgeben, wobei der Template-Parameter unbekannt ist.</p>
<pre><code class="language-cpp">[code]template&lt;typename T&gt;
Object&lt;T&gt; Read(const std::string &amp;filename);[/code]
</code></pre>
<p>Die Binärdatei enthält Daten des Datentyps T, sodass erst beim Einlesen der Datei festgestellt wird, was T überhaupt ist. Wie kann aber beim Aufruf der Methode und Verlassen dieser das Ergebnis einem Objekt 'Object&lt;T&gt;' zugewiesen werden, wenn T unbekannt ist.</p>
<p>Gibt es eine Möglichkeit?</p>
<p>Danke und Gruß,<br />
CPPSaid</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/305149/lese-methode-mit-unbekanntem-template-parameter-als-rückgabe</link><generator>RSS for Node</generator><lastBuildDate>Sat, 27 Jun 2026 08:27:37 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/305149.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 22 Jun 2012 09:11:27 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Lese-Methode mit unbekanntem Template-Parameter als Rückgabe on Fri, 22 Jun 2012 09:11:27 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe folgendes Problem und weiß nicht, ob es gelöst werden kann.</p>
<p>Ich habe eine Methode, die eine Binärdatei einlesen soll. Die Methode soll eine Instanz einer Template-Klasse zurückgeben, wobei der Template-Parameter unbekannt ist.</p>
<pre><code class="language-cpp">[code]template&lt;typename T&gt;
Object&lt;T&gt; Read(const std::string &amp;filename);[/code]
</code></pre>
<p>Die Binärdatei enthält Daten des Datentyps T, sodass erst beim Einlesen der Datei festgestellt wird, was T überhaupt ist. Wie kann aber beim Aufruf der Methode und Verlassen dieser das Ergebnis einem Objekt 'Object&lt;T&gt;' zugewiesen werden, wenn T unbekannt ist.</p>
<p>Gibt es eine Möglichkeit?</p>
<p>Danke und Gruß,<br />
CPPSaid</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2226117</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2226117</guid><dc:creator><![CDATA[CPPSaid]]></dc:creator><pubDate>Fri, 22 Jun 2012 09:11:27 GMT</pubDate></item><item><title><![CDATA[Reply to Lese-Methode mit unbekanntem Template-Parameter als Rückgabe on Fri, 22 Jun 2012 09:46:31 GMT]]></title><description><![CDATA[<p>CPPSaid schrieb:</p>
<blockquote>
<p>Gibt es eine Möglichkeit?</p>
</blockquote>
<p>Nein.<br />
Du musst Template-Parameter zur Compilezeit angeben, nicht erst zur Laufzeit, wenn du die Datei liest.</p>
<p>Allerdings hast du vermutlich nur eine begrenzte Anzahl von Kandidaten, die der Dateileser prüft. Das wäre ggf. ein Kandidat für boost::variant.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2226127</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2226127</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 22 Jun 2012 09:46:31 GMT</pubDate></item><item><title><![CDATA[Reply to Lese-Methode mit unbekanntem Template-Parameter als Rückgabe on Fri, 22 Jun 2012 10:27:34 GMT]]></title><description><![CDATA[<p>CPPSaid schrieb:</p>
<blockquote>
<p>Gibt es eine Möglichkeit?</p>
</blockquote>
<p>Jaein,</p>
<p>Im Allgemeinen macht man dass so, dass die Funktion einen Zeiger auf ein Interface liefert</p>
<pre><code class="language-cpp">ObjectBase* Read(const std::string &amp;filename);
</code></pre>
<p>(besser noch mit <a href="http://www.boost.org/doc/libs/1_49_0/libs/smart_ptr/smart_ptr.htm" rel="nofollow">Smartpointer</a> als Returnwert; in C++11 gibt es z.B. <a href="http://en.cppreference.com/w/cpp/memory/unique_ptr" rel="nofollow">unique_ptr</a>)</p>
<p>Alle Objekt-Klassen müssen dann von <code>ObjectBase</code> abgeleitet sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2226131</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2226131</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Fri, 22 Jun 2012 10:27:34 GMT</pubDate></item><item><title><![CDATA[Reply to Lese-Methode mit unbekanntem Template-Parameter als Rückgabe on Fri, 22 Jun 2012 13:32:56 GMT]]></title><description><![CDATA[<p>Werner Salomon schrieb:</p>
<blockquote>
<p>CPPSaid schrieb:</p>
<blockquote>
<p>Gibt es eine Möglichkeit?</p>
</blockquote>
<p>Jaein,</p>
<p>Im Allgemeinen macht man dass so, dass die Funktion einen Zeiger auf ein Interface liefert</p>
<pre><code class="language-cpp">ObjectBase* Read(const std::string &amp;filename);
</code></pre>
<p>(besser noch mit <a href="http://www.boost.org/doc/libs/1_49_0/libs/smart_ptr/smart_ptr.htm" rel="nofollow">Smartpointer</a> als Returnwert; in C++11 gibt es z.B. <a href="http://en.cppreference.com/w/cpp/memory/unique_ptr" rel="nofollow">unique_ptr</a>)</p>
<p>Alle Objekt-Klassen müssen dann von <code>ObjectBase</code> abgeleitet sein.</p>
</blockquote>
<p>Generell ist das keine schlechte Möglichkeit. Allerdings frage ich mich, wie dann weiter mit den Daten gearbeitet werden kann. Wenn es darauf ankommt, dass man später den Datentyp kennt, muss der ja irgendwie von</p>
<pre><code>ObjectBase
</code></pre>
<p>abgefragt werden. Ist das nicht ziemlich umständlich?</p>
<p>CPPSaid</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2226198</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2226198</guid><dc:creator><![CDATA[CPPSaid]]></dc:creator><pubDate>Fri, 22 Jun 2012 13:32:56 GMT</pubDate></item></channel></rss>