<?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[[gelöst] template basiertes data loading denkanstoß]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich möchte gerne über eine statische Klasse eine schnittstelle zu allerlei Datntypen bereitstellen, die anhand von encodings in die entsprechenden objekte aus dem bytecode einer datei oder eines streams erzeugt werden.</p>
<p>dazu habe ich in der statischen klasse eine methode definiert</p>
<pre><code>template&lt;typename T&gt; T Load(std::string name);
</code></pre>
<p>über welche ich verschiedenen datentypen anbieten möchte und die der anwender um neue typen (anhand von spezialisation) erweitern kann.</p>
<p>(es macht beispielsweise keinen sinn ein txt file in ein int pressen zu wollen, daher ist Load&lt;int&gt; nicht definiert und führt zu compiler fehlern)</p>
<p>Dann habe ich auch noch eine map angelegt, in der ich verschiedene encoder anhand der dateiendung benutzen möchte.</p>
<pre><code>std::map&lt;std::string, encoder&gt; encodings;
</code></pre>
<p>Das Ganze klappt wunderbar solange ich nicht versuchen einen typ über mehrere encoder zu verteilen, da sich der compiler dann beschwert, die spezialisierung würde bereits existieren.</p>
<p>ich brauche nun einen Denkanstoß, wie ich es hinbekommen kann, dass ich über die Load&lt;T&gt; methode trotzdem das gleiche T aus mehreren encodings erhalten kann.</p>
<p>beispiel zur veranschaulichung</p>
<pre><code>//same encoder diferent encodings

std::string text = Load&lt;std::string&gt;(&quot;MyFile.xml&quot;);
Xml xml = Load&lt;Xml&gt;(&quot;MyFile.xml&quot;);

//same encoding diferent encoders

std::string xml = Load&lt;std::string&gt;(&quot;MyFile.xml&quot;);
std::string text = Load&lt;std::string&gt;(&quot;MyFile.txt&quot;);
</code></pre>
<p>(über den sinn und zweck dieses beispielcodes soll hier nicht diskutiert werden!)</p>
<p>Ich würde auch gerne bei den templates bleiben weil ich sonst für jeden Typ eine eigene funktion schreiben müsste und somit die erweiterbarkeit abhanden kommt.</p>
<p>auch das beispiel</p>
<pre><code>class X
{
   public:
       X();

       template&lt;typename T&gt; T Get() { return _getT(); }

   protected:
       int _getT() { return 0; }
       float _getT() { return 0.5f; }
};

main()
{
   X x = X();

   int i = Get();
   int f = Get();
}
</code></pre>
<p>bringt hier nichts, da hier wieder alle typen zur compilezeit bekannt sein müssen und die erweiterbarkeit somit nicht gegeben ist.</p>
<p>Danke schonmal für eure Tipps!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/321097/gelöst-template-basiertes-data-loading-denkanstoß</link><generator>RSS for Node</generator><lastBuildDate>Wed, 22 Jul 2026 01:20:05 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/321097.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 23 Oct 2013 14:31:15 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [gelöst] template basiertes data loading denkanstoß on Fri, 25 Oct 2013 22:21:33 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich möchte gerne über eine statische Klasse eine schnittstelle zu allerlei Datntypen bereitstellen, die anhand von encodings in die entsprechenden objekte aus dem bytecode einer datei oder eines streams erzeugt werden.</p>
<p>dazu habe ich in der statischen klasse eine methode definiert</p>
<pre><code>template&lt;typename T&gt; T Load(std::string name);
</code></pre>
<p>über welche ich verschiedenen datentypen anbieten möchte und die der anwender um neue typen (anhand von spezialisation) erweitern kann.</p>
<p>(es macht beispielsweise keinen sinn ein txt file in ein int pressen zu wollen, daher ist Load&lt;int&gt; nicht definiert und führt zu compiler fehlern)</p>
<p>Dann habe ich auch noch eine map angelegt, in der ich verschiedene encoder anhand der dateiendung benutzen möchte.</p>
<pre><code>std::map&lt;std::string, encoder&gt; encodings;
</code></pre>
<p>Das Ganze klappt wunderbar solange ich nicht versuchen einen typ über mehrere encoder zu verteilen, da sich der compiler dann beschwert, die spezialisierung würde bereits existieren.</p>
<p>ich brauche nun einen Denkanstoß, wie ich es hinbekommen kann, dass ich über die Load&lt;T&gt; methode trotzdem das gleiche T aus mehreren encodings erhalten kann.</p>
<p>beispiel zur veranschaulichung</p>
<pre><code>//same encoder diferent encodings

std::string text = Load&lt;std::string&gt;(&quot;MyFile.xml&quot;);
Xml xml = Load&lt;Xml&gt;(&quot;MyFile.xml&quot;);

//same encoding diferent encoders

std::string xml = Load&lt;std::string&gt;(&quot;MyFile.xml&quot;);
std::string text = Load&lt;std::string&gt;(&quot;MyFile.txt&quot;);
</code></pre>
<p>(über den sinn und zweck dieses beispielcodes soll hier nicht diskutiert werden!)</p>
<p>Ich würde auch gerne bei den templates bleiben weil ich sonst für jeden Typ eine eigene funktion schreiben müsste und somit die erweiterbarkeit abhanden kommt.</p>
<p>auch das beispiel</p>
<pre><code>class X
{
   public:
       X();

       template&lt;typename T&gt; T Get() { return _getT(); }

   protected:
       int _getT() { return 0; }
       float _getT() { return 0.5f; }
};

main()
{
   X x = X();

   int i = Get();
   int f = Get();
}
</code></pre>
<p>bringt hier nichts, da hier wieder alle typen zur compilezeit bekannt sein müssen und die erweiterbarkeit somit nicht gegeben ist.</p>
<p>Danke schonmal für eure Tipps!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2362396</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2362396</guid><dc:creator><![CDATA[Pria]]></dc:creator><pubDate>Fri, 25 Oct 2013 22:21:33 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] template basiertes data loading denkanstoß on Wed, 23 Oct 2013 14:41:37 GMT]]></title><description><![CDATA[<pre><code>template &lt;class Encoding, class Encoder&gt; Encoding Load(const string &amp;path){
    return Encoder&lt;Encoding&gt;().parse(path);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2362397</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2362397</guid><dc:creator><![CDATA[nwp3]]></dc:creator><pubDate>Wed, 23 Oct 2013 14:41:37 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] template basiertes data loading denkanstoß on Wed, 23 Oct 2013 14:55:25 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">//same encoder diferent encodings 

 std::string text = Load&lt;std::string&gt;(&quot;MyFile.xml&quot;); 
 Xml xml = Load&lt;Xml&gt;(&quot;MyFile.xml&quot;); 

//same encoding diferent encoders 

 std::string xml = Load&lt;std::string&gt;(&quot;MyFile.xml&quot;); 
 std::string text = Load&lt;std::string&gt;(&quot;MyFile.txt&quot;);
</code></pre>
<p>Rueckgabetypen sind nicht Teil der Signatur. Du kannst Traits benutzen, Rueckgabetyp in Spezialisierung einarbeiten oder Strategiepattern benutzen.</p>
<p>PS: Da du meist einfach verschwindest, wenig kontext lieferst und ich dich fuer blurry halte, fallen meine Antworten spaerlich aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2362402</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2362402</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Wed, 23 Oct 2013 14:55:25 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] template basiertes data loading denkanstoß on Thu, 24 Oct 2013 12:42:14 GMT]]></title><description><![CDATA[<p>knivil schrieb:</p>
<blockquote>
<p>Rueckgabetypen sind nicht Teil der Signatur. Du kannst Traits benutzen, Rueckgabetyp in Spezialisierung einarbeiten oder Strategiepattern benutzen.</p>
</blockquote>
<p>OK, werde ich mich mal reinarbeiten.</p>
<p><em><strong>[Offtopic]</strong></em></p>
<p>knivil schrieb:</p>
<blockquote>
<p>da du meist einfach verschwindest</p>
</blockquote>
<p>nun ja, seid ihr doch mitunter auch selber schuld. Wie oft hat man mir schon sinngemäß gesagt &quot;das was du da machst klappt eh nicht&quot; oder &quot;du bist ja eh n noob&quot; oder &quot;lass es, das was du vorhast ist der letzte scheiß&quot;</p>
<p>und dann könnt ihr mich auch ganz ehrlich mal, ok, mag sein, dass ich noch nicht die Erfahrung habe, die andere haben oder die andere vorraussetzen (ich weiß ja nicht ob man neuerdings einen kompetenz test ablegen muss um überhaupt in ein forum zu posten) aber</p>
<p>1. hab ich genug grips um als entwickler zu arbeiten und<br />
2. brauch ich mir nich sagen zu lassen &quot;ja das hast du so und so zu machen alles andere ist falsch&quot;</p>
<p>so und wenn das mein Lösungsansatz ist und einige der Meinung sind das mit einem &quot;*lach*&quot; kommentieren zu müssen kann ich auch nichts dafür aber ein bischen etikette und anstand kann man ja wohl erwarten, zudem wenns funktioniert, was störts euch?</p>
<p>knivil schrieb:</p>
<blockquote>
<p>wenig kontext lieferst</p>
</blockquote>
<p>mitunter siehe meine argumentation oben</p>
<p>knivil schrieb:</p>
<blockquote>
<p>ich dich fuer blurry halte, fallen meine Antworten spaerlich aus.</p>
</blockquote>
<p>Ich weiß nicht wer oder was dieser blurry sein soll, aber ich bins definitiv nicht!</p>
<p>Ich hab mal gesucht nach blurry (war hoffentlich richtig)<br />
<a href="http://www.c-plusplus.net/forum/u115120" rel="nofollow">http://www.c-plusplus.net/forum/u115120</a><br />
Anmeldungsdatum: 23.01.2010</p>
<p>und dahingegen mein Profil<br />
<a href="http://www.c-plusplus.net/forum/u111259" rel="nofollow">http://www.c-plusplus.net/forum/u111259</a><br />
Anmeldungsdatum: 10.12.2008</p>
<p>und nur weil ich keine Privatinformationen drinn habe, heißt das noch lange nicht, dass ich irgendein fake profil benutze.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2362612</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2362612</guid><dc:creator><![CDATA[Pria]]></dc:creator><pubDate>Thu, 24 Oct 2013 12:42:14 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] template basiertes data loading denkanstoß on Fri, 25 Oct 2013 07:04:01 GMT]]></title><description><![CDATA[<p>Ich nehme mal an, das Stichwort, das du suchst, ist Serialisierung. Dafuer gibts schon unzaehlige Bibliotheken, z.B. boost.serialization: <a href="http://www.boost.org/doc/libs/1_54_0/libs/serialization/doc/index.html" rel="nofollow">http://www.boost.org/doc/libs/1_54_0/libs/serialization/doc/index.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2362761</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2362761</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Fri, 25 Oct 2013 07:04:01 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] template basiertes data loading denkanstoß on Fri, 25 Oct 2013 22:24:06 GMT]]></title><description><![CDATA[<p>Leider ist es nicht so einfach und es handelt sich dabei tatsächlich um eine Klasse um zu Verarbeiten, nicht zu serialisieren, also aus einem Xml-File beispielsweise ein Xml Objekt zu parsen etc. eben anhand der verschiedenen encodings je nach dateiendung und das so gestrickt, dass der anwender dem System sagen kann was er gerne für ein objekt hätte (sofern diese verwandt sind natürlich). Darüber hianus muss der Anwender zusätzlich neue encodings registrieren können.</p>
<p><strong>[Gelöst]</strong></p>
<p>So leute, vielen Dank für die zwar spärliche aber im endeffekt trotzdem gute Hilfe.</p>
<p>Ich habe mein System jetzt so umgebaut, dass ich einen neuen typ objekt erzeugt habe und diesen jetzt als rückgabetyp verwende. Meine struct objekt ist dabei so ähnlich aufgebaut wie boost::any und kann somit jeden typen zurückgeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2362797</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2362797</guid><dc:creator><![CDATA[Pria]]></dc:creator><pubDate>Fri, 25 Oct 2013 22:24:06 GMT</pubDate></item></channel></rss>