<?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 exportieren - Mögliche Alternative]]></title><description><![CDATA[<p>Hallo,</p>
<p>folgender Code sei vorhanden um ein &quot;Wörterbuch&quot; zu implementieren, soll jedoch jetzt nur als Beispiel dienen:</p>
<pre><code>extern &quot;C&quot;
{
	template&lt;typename Tk, typename Tv&gt;
	class __declspec(dllexport) xyz
	{
	private:
		Tk* keyArray;
		Tv* valueArray;

	public:
		xyz();
		~xyz();
		void addPair(Tk key, Tv value){
			keyArray = (Tk*)alloc(/*whatever*/);
			valueArray = (Tv*)alloc(/*whatever*/);
			// usw...
		}
	};
}
</code></pre>
<p>Diesen Code würde ich gerne in einer statischen Bibliothek exportieren und in einem Programm, welches diese Lib nutzt, wie folgt verwenden:</p>
<pre><code>// ...
xyz&lt;int, short&gt; whatever;
whatever.add(1,2);
// ...
</code></pre>
<p>Nun ist es ja leider nicht möglich, Templates zu exportieren.<br />
Ich habe überlegt, einfach ein paar &quot;Vorgaben&quot; zu exportieren, wie z.B.</p>
<pre><code>extern &quot;C&quot;
{
class __declspec(dllexport) VorlageByteInt
{
	private:
		xyz&lt;BYTE, int&gt; dasTemplate;
	public:
		//...			
};
class __declspec(dllexport) VorlageShortInt64
{
	private:
		xyz&lt;short, long int&gt; dasTemplate;
	public:
		//...			
};
// usw...
}
</code></pre>
<p>Allerdings scheint mir das nicht gerade die feine Art zu sein.<br />
Wie löse ich das am besten?</p>
<p>Gruß.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/312580/template-exportieren-mögliche-alternative</link><generator>RSS for Node</generator><lastBuildDate>Sun, 02 Aug 2026 19:36:09 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/312580.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 08 Jan 2013 14:52:10 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Template exportieren - Mögliche Alternative on Tue, 08 Jan 2013 14:52:10 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>folgender Code sei vorhanden um ein &quot;Wörterbuch&quot; zu implementieren, soll jedoch jetzt nur als Beispiel dienen:</p>
<pre><code>extern &quot;C&quot;
{
	template&lt;typename Tk, typename Tv&gt;
	class __declspec(dllexport) xyz
	{
	private:
		Tk* keyArray;
		Tv* valueArray;

	public:
		xyz();
		~xyz();
		void addPair(Tk key, Tv value){
			keyArray = (Tk*)alloc(/*whatever*/);
			valueArray = (Tv*)alloc(/*whatever*/);
			// usw...
		}
	};
}
</code></pre>
<p>Diesen Code würde ich gerne in einer statischen Bibliothek exportieren und in einem Programm, welches diese Lib nutzt, wie folgt verwenden:</p>
<pre><code>// ...
xyz&lt;int, short&gt; whatever;
whatever.add(1,2);
// ...
</code></pre>
<p>Nun ist es ja leider nicht möglich, Templates zu exportieren.<br />
Ich habe überlegt, einfach ein paar &quot;Vorgaben&quot; zu exportieren, wie z.B.</p>
<pre><code>extern &quot;C&quot;
{
class __declspec(dllexport) VorlageByteInt
{
	private:
		xyz&lt;BYTE, int&gt; dasTemplate;
	public:
		//...			
};
class __declspec(dllexport) VorlageShortInt64
{
	private:
		xyz&lt;short, long int&gt; dasTemplate;
	public:
		//...			
};
// usw...
}
</code></pre>
<p>Allerdings scheint mir das nicht gerade die feine Art zu sein.<br />
Wie löse ich das am besten?</p>
<p>Gruß.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2287602</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2287602</guid><dc:creator><![CDATA[Templ]]></dc:creator><pubDate>Tue, 08 Jan 2013 14:52:10 GMT</pubDate></item><item><title><![CDATA[Reply to Template exportieren - Mögliche Alternative on Tue, 08 Jan 2013 14:55:34 GMT]]></title><description><![CDATA[<p>Wozu soll das gut sein? Templates liegen im Header. Den Header musst du sowieso deiner Bibliothek beilegen. Damit ist aber schon alles vorhanden, was der Benutzer braucht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2287604</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2287604</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Tue, 08 Jan 2013 14:55:34 GMT</pubDate></item><item><title><![CDATA[Reply to Template exportieren - Mögliche Alternative on Tue, 08 Jan 2013 16:22:55 GMT]]></title><description><![CDATA[<p>Schon, aber ich möchte ungerne das Template in der Headerdatei definieren.<br />
Oder verstehe ich dich falsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2287628</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2287628</guid><dc:creator><![CDATA[Templ]]></dc:creator><pubDate>Tue, 08 Jan 2013 16:22:55 GMT</pubDate></item><item><title><![CDATA[Reply to Template exportieren - Mögliche Alternative on Tue, 08 Jan 2013 16:37:41 GMT]]></title><description><![CDATA[<p>Mit einiger Wahrscheinlichkeit ja. Templates sind Vorlagen, aus denen der Compiler zur Compilezeit Klassen bzw. Funktionen stanzt. Der Linker kann mit ihnen nicht mehr arbeiten -- nur noch mit den aus ihnen gestanzten Funktionen.</p>
<p>Da nur der Compiler mit Templates etwas anfangen kann, macht es wenig Sinn, sie aus einer DLL exportieren zu wollen, und damit der Compiler sie verwenden kann, muss er sie in Gänze kennen. Wenn die Template, um die es dir geht, zu deinem API gehören soll, wirst du daher nicht umhinkommen, sie in einem Header zu definieren und diesen auszuliefern -- sonst kennt der Compiler desjenigen, der deine Bibliothek benutzen will, die Template nicht und kann keine Klasse/Funktion daraus stanzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2287637</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2287637</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Tue, 08 Jan 2013 16:37:41 GMT</pubDate></item><item><title><![CDATA[Reply to Template exportieren - Mögliche Alternative on Tue, 08 Jan 2013 16:48:49 GMT]]></title><description><![CDATA[<p>Ja genau, das ist mir schon klar, deshalb dachte ich es gäbe da evtl. eine &quot;Alternative&quot; um dieses Problem zu lösen... Vollständiges Template im Header wäre natürlich eine, aber das gefällt mir garnicht... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Gibt´s noch irgendwelche anderen Wege, um das Problem zu &quot;umgehen&quot;?<br />
Ich muss nicht unbedingt einen finden, ich frage das aus reinem Interesse...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2287646</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2287646</guid><dc:creator><![CDATA[Templ]]></dc:creator><pubDate>Tue, 08 Jan 2013 16:48:49 GMT</pubDate></item><item><title><![CDATA[Reply to Template exportieren - Mögliche Alternative on Tue, 08 Jan 2013 16:52:13 GMT]]></title><description><![CDATA[<p>Zeig konkreten Code, dann kann man evtl. eine passende Loesung vorschlagen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2287647</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2287647</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Tue, 08 Jan 2013 16:52:13 GMT</pubDate></item><item><title><![CDATA[Reply to Template exportieren - Mögliche Alternative on Tue, 08 Jan 2013 16:57:38 GMT]]></title><description><![CDATA[<p>Die vollständige Definition eines Templates muss zur Compilezeit zur Verfügung stehen, da führt leider kein Weg vorbei.<br />
Das <code>__declspec(dllexport)</code> kommt mir komisch vor, was bezweckst du damit? Da schon der Linker keine Templates instanzieren kann, geht es zur Laufzeit erst recht nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2287653</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2287653</guid><dc:creator><![CDATA[Captain Obvious]]></dc:creator><pubDate>Tue, 08 Jan 2013 16:57:38 GMT</pubDate></item><item><title><![CDATA[Reply to Template exportieren - Mögliche Alternative on Tue, 08 Jan 2013 17:17:04 GMT]]></title><description><![CDATA[<p>BspCode steht oben <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 />
Dachte damit sage ich dem Compiler, dass ich die entsprechende Funktion oder in diesem Fall die entsprechende Klasse in die Lib exportieren möchte? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2287663</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2287663</guid><dc:creator><![CDATA[Templ]]></dc:creator><pubDate>Tue, 08 Jan 2013 17:17:04 GMT</pubDate></item><item><title><![CDATA[Reply to Template exportieren - Mögliche Alternative on Tue, 08 Jan 2013 17:19:45 GMT]]></title><description><![CDATA[<p>dllexport ist Windows-only und (wie der Name vermuten lässt) fürs exportieren aus DLLs gedacht. DLLs sind dynamische Bibliotheken, also das Gegenteil von statisch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2287665</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2287665</guid><dc:creator><![CDATA[Captain Obvious]]></dc:creator><pubDate>Tue, 08 Jan 2013 17:19:45 GMT</pubDate></item><item><title><![CDATA[Reply to Template exportieren - Mögliche Alternative on Tue, 08 Jan 2013 18:53:56 GMT]]></title><description><![CDATA[<p>@Templ:<br />
Bei einer statischen Bibliothek wird anstatt einer *.exe Datei eine lib-Datei erzeugt. Du programmierst ganz normal, indem du in die Header die Deklarationen und in die Source-Dateien die Definitionen schreibst<br />
Wenn du die Bibliothek verwenden willst, musst du dem Compiler sagen, wo er die Deklarationen findest (also die Header Dateien). Diese includest du dann ganz normal.<br />
Dem Linker musst du dann auch noch sagen, wo er die Lib-Datei findest, aus dieser wird dann zusammen mit *.obj-Dateien deiner Sourcefiles die *.exe deines Programmes.<br />
Schreibe also ganz normal die Klasse in einen Header (weil die Templates verwendest musst du sie da ganz reinschreiben und nicht nur das, was man bei normalen Klassen benutzt). Mehr musst du in der Regel nicht tun.<br />
Und was soll eigentlich das extern C? Das ist reines C++, da brauchst du kein extern C, oder irre ich mich?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2287700</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2287700</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Tue, 08 Jan 2013 18:53:56 GMT</pubDate></item><item><title><![CDATA[Reply to Template exportieren - Mögliche Alternative on Wed, 09 Jan 2013 14:28:45 GMT]]></title><description><![CDATA[<p>Captain Obvious schrieb:</p>
<blockquote>
<p>dllexport ist Windows-only und (wie der Name vermuten lässt) fürs exportieren aus DLLs gedacht. DLLs sind dynamische Bibliotheken, also das Gegenteil von statisch.</p>
</blockquote>
<p><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>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/29873">@Nathan</a>: Ist mir alles bekannt, trotzdem danke <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 />
Extern &quot;C&quot; wird, soweit ich weiß, vorallem wegen überladenen Funktionen, die C nicht kennt, verwendet, um somit &quot;kompatibel&quot; zu sein...</p>
<p>Aber zum Thema zurück, ich glaube es ist geklärt, dass es da keine &quot;Alternative&quot; gibt.</p>
<p>Danke euch <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f4a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--light_bulb"
      title=":bulb:"
      alt="💡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2287957</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2287957</guid><dc:creator><![CDATA[Templ]]></dc:creator><pubDate>Wed, 09 Jan 2013 14:28:45 GMT</pubDate></item><item><title><![CDATA[Reply to Template exportieren - Mögliche Alternative on Wed, 09 Jan 2013 15:23:44 GMT]]></title><description><![CDATA[<p>Eher umgekehrt...<br />
Extern C ist für C++ Programme, die C Code verwenden, da die interne Signatur von C-Funktionen anders ist als die von C++ (wegen Überladung).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2287979</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2287979</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Wed, 09 Jan 2013 15:23:44 GMT</pubDate></item><item><title><![CDATA[Reply to Template exportieren - Mögliche Alternative on Wed, 09 Jan 2013 17:07:22 GMT]]></title><description><![CDATA[<p>Okay, gut zu wissen <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/2288005</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2288005</guid><dc:creator><![CDATA[Templ]]></dc:creator><pubDate>Wed, 09 Jan 2013 17:07:22 GMT</pubDate></item><item><title><![CDATA[Reply to Template exportieren - Mögliche Alternative on Wed, 09 Jan 2013 20:08:17 GMT]]></title><description><![CDATA[<pre><code>namespace party
{
    int foo(bar*, float);
}
</code></pre>
<p>würde eben vom Compiler zu etwas wie</p>
<p>__party__foo_int_barp_float</p>
<p>als Name verwurstet werden (in der Realität nicht so primitiv), damit die Funktion für den Linker eindeutig ist.</p>
<pre><code>extern &quot;C&quot; int foo(bar*, float);
</code></pre>
<p>würde auch danach noch foo heißen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2288093</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2288093</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Wed, 09 Jan 2013 20:08:17 GMT</pubDate></item><item><title><![CDATA[Reply to Template exportieren - Mögliche Alternative on Wed, 09 Jan 2013 22:00:38 GMT]]></title><description><![CDATA[<p>Nathan schrieb:</p>
<blockquote>
<p>Eher umgekehrt...<br />
Extern C ist für C++ Programme, die C Code verwenden, da die interne Signatur von C-Funktionen anders ist als die von C++ (wegen Überladung).</p>
</blockquote>
<p><code>extern &quot;C&quot;</code> kann auch in der Gegenrichtung verwendet werden, also wenn man in einer C++ Library eine Funktion definieren möchte, so dass sie aus einem C Programm aufgerufen werden kann.</p>
<p><code>extern &quot;C&quot;</code> bewirkt einfach nur dass die Bezeichner C-kompatibel dekoriert werden. Ob man die Bezeichner dann verwendet um etwas zu konsumieren oder zu exportieren ist egal.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2288120</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2288120</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 09 Jan 2013 22:00:38 GMT</pubDate></item></channel></rss>