<?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 Parameter Pointer oder nicht]]></title><description><![CDATA[<p>Hallo,</p>
<p>mir fallen leider offensichtlich die richtigen Bezeichnungen für mein Problem nicht ein - deshalb finde ich nichts. Ich hoffe jmd. kann mir helfen.</p>
<p>Ich habe eine Template Methode, die auf den Template Parameter eine Methode aufrufen soll. Nun macht es für den Aufruf natürlich einen Unterschied, ob das ein Pointer/Shared-Pointer oder nicht ist:</p>
<pre><code>template&lt;class Input&gt;
void doSomething(Input i) { i.called(); }
</code></pre>
<pre><code>doSomething&lt;Input*&gt;(&amp;myvar);
doSomething&lt;Input&gt;(myvar);
</code></pre>
<p>Wie kann ich das Template so gestalten, dass ich das richtig implementiere?</p>
<p>Herzlichen Dank im Voraus!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/325161/template-parameter-pointer-oder-nicht</link><generator>RSS for Node</generator><lastBuildDate>Mon, 13 Jul 2026 03:29:45 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/325161.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 17 Apr 2014 09:42:08 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Template Parameter Pointer oder nicht on Thu, 17 Apr 2014 09:42:08 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>mir fallen leider offensichtlich die richtigen Bezeichnungen für mein Problem nicht ein - deshalb finde ich nichts. Ich hoffe jmd. kann mir helfen.</p>
<p>Ich habe eine Template Methode, die auf den Template Parameter eine Methode aufrufen soll. Nun macht es für den Aufruf natürlich einen Unterschied, ob das ein Pointer/Shared-Pointer oder nicht ist:</p>
<pre><code>template&lt;class Input&gt;
void doSomething(Input i) { i.called(); }
</code></pre>
<pre><code>doSomething&lt;Input*&gt;(&amp;myvar);
doSomething&lt;Input&gt;(myvar);
</code></pre>
<p>Wie kann ich das Template so gestalten, dass ich das richtig implementiere?</p>
<p>Herzlichen Dank im Voraus!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2395002</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2395002</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 17 Apr 2014 09:42:08 GMT</pubDate></item><item><title><![CDATA[Reply to Template Parameter Pointer oder nicht on Thu, 17 Apr 2014 09:58:50 GMT]]></title><description><![CDATA[<pre><code>template&lt;class Input&gt;
void doSomething(Input i) { i.called(); }
template&lt;class Input&gt;
void doSomething(Input* i) { i-&gt;called(); } // vll. auch eher (Input const* i)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2395010</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2395010</guid><dc:creator><![CDATA[Fytch]]></dc:creator><pubDate>Thu, 17 Apr 2014 09:58:50 GMT</pubDate></item><item><title><![CDATA[Reply to Template Parameter Pointer oder nicht on Thu, 17 Apr 2014 10:06:16 GMT]]></title><description><![CDATA[<p>Das muss einfach noch generischer gemacht werden:</p>
<pre><code>template&lt; typename T &gt;
auto doSomething( T&amp;&amp; t ) -&gt; decltype(t.called()) { return t.called(); }

template&lt; typename T &gt;
auto doSomething( T&amp;&amp; t ) -&gt; decltype(t-&gt;called()) { return t-&gt;called(); }

#include &lt;iostream&gt;
#include &lt;memory&gt;

int main()
{
	struct A
	{
		void called(){ std::cout &lt;&lt; &quot;called!\n&quot;; }
	};

	doSomething( A{} );
	doSomething( new A );
	doSomething( std::unique_ptr&lt;A&gt;{new A} );
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2395014</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2395014</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Thu, 17 Apr 2014 10:06:16 GMT</pubDate></item><item><title><![CDATA[Reply to Template Parameter Pointer oder nicht on Thu, 17 Apr 2014 10:16:06 GMT]]></title><description><![CDATA[<p>Warum kannst du nicht verlangen, dass immer oder nie ein Zeiger übergeben wird? Finde ich sauberer als im Nachhinein wieder eine Fallunterscheidung einzubauen.</p>
<p>Vor allem ist es normalerweise keine gute Idee, Smart-Pointer zu übergeben, wenn du nur das Pointee-Objekt verändern willst. Und zwar weil du beim <code>unique_ptr</code> den Besitz raubst und bei <code>shared_ptr</code> eine teuere Kopie anfertigst. Smart-Pointer per Referenz zu übergeben ist nur sinnvoll, wenn Zugriff auf den Smart-Pointer selbst nötig ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2395023</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2395023</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 17 Apr 2014 10:16:06 GMT</pubDate></item><item><title><![CDATA[Reply to Template Parameter Pointer oder nicht on Thu, 17 Apr 2014 10:19:46 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>das mit dem &quot;Fordern&quot; find ich nicht richtig und ich weiß noch nicht, wie ich es verwenden will. Von einem unique_ptr hab ich nie gesprochen... Das ist klar, dass man den nicht einfach weitergeben darf.</p>
<p>Vorschlag 1 läuft schon mal.<br />
Vorschlag 2 probier ich gerade noch aus, weil ich natürlich schon auch gern die Option auf shared_ptr hätte!</p>
<p>danke derweilen!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2395028</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2395028</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 17 Apr 2014 10:19:46 GMT</pubDate></item><item><title><![CDATA[Reply to Template Parameter Pointer oder nicht on Thu, 17 Apr 2014 10:28:17 GMT]]></title><description><![CDATA[<p>Ich würde das ganze gern in einer Template Klasse machen.<br />
Da kann ich das überladen so aber leider nicht machen.</p>
<p>Irgendwer eine Idee, wie ich Variante 2 in eine Klasse bringen kann? <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</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2395031</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2395031</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 17 Apr 2014 10:28:17 GMT</pubDate></item><item><title><![CDATA[Reply to Template Parameter Pointer oder nicht on Thu, 17 Apr 2014 11:08:53 GMT]]></title><description><![CDATA[<p>swalkner schrieb:</p>
<blockquote>
<p>das mit dem &quot;Fordern&quot; find ich nicht richtig und ich weiß noch nicht, wie ich es verwenden will.</p>
</blockquote>
<p>Ähm... Die ganze Idee hinter API-Design besteht darin, klar definierte Schnittstellen anzubieten, die ein Benutzer intuitiv einsetzen kann. Überlegungen wie &quot;fügen wir Feature X ein, allein schon weil es möglich ist&quot; und &quot;bieten wir doch beides an, Hauptsache alle sind glücklich&quot; sind genau der Grund, wieso so viele APIs vermurkst sind. Bitte mach nicht den gleichen Fehler.</p>
<p>Ausserdem, APIs sollten aus User-Perspektive entworfen werden. Wenn du noch nicht weisst, wie du es benutzen willst, dann lohnt es sich, sich zuerst diese Überlegung zu machen, damit du nachher nicht ständig refactoren musst.</p>
<p>So viel zum Allgemeinen. Nun konkret, wer ruft den deine Funktion auf und kann sich nicht auf Zeiger oder Referenz festlegen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2395045</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2395045</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 17 Apr 2014 11:08:53 GMT</pubDate></item><item><title><![CDATA[Reply to Template Parameter Pointer oder nicht on Thu, 17 Apr 2014 11:12:57 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Wenn du noch nicht weisst, wie du es benutzen willst, dann lohnt es sich, sich zuerst diese Überlegung zu machen, damit du nachher nicht ständig refactoren musst.</p>
</blockquote>
<p>Ich will das mal umformulieren.</p>
<p>Wenn du noch nicht weisst, wie du es benutzen willst, dann lohnt es sich nicht, es zu implementieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2395047</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2395047</guid><dc:creator><![CDATA[nwp3]]></dc:creator><pubDate>Thu, 17 Apr 2014 11:12:57 GMT</pubDate></item><item><title><![CDATA[Reply to Template Parameter Pointer oder nicht on Thu, 17 Apr 2014 11:17:47 GMT]]></title><description><![CDATA[<p>Danke für eure Anmerkungen (wobei bei einem template ja egal sein sollte, womit man es füttert)</p>
<p>Hat trotzdem jmd eine Lösung, wie ich beides (in einer Klasse) unterstützen könnte?</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2395052</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2395052</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 17 Apr 2014 11:17:47 GMT</pubDate></item><item><title><![CDATA[Reply to Template Parameter Pointer oder nicht on Thu, 17 Apr 2014 11:30:16 GMT]]></title><description><![CDATA[<p>swalkner schrieb:</p>
<blockquote>
<p>wobei bei einem template ja egal sein sollte, womit man es füttert</p>
</blockquote>
<p>Du verstehst Templates falsch. Sie sind nicht dazu da, unklaren Umgang mit Typen zu korrigieren. Insbesondere sollen sie die Typsicherheit erhöhen, nicht abschwächen.</p>
<p>swalkner schrieb:</p>
<blockquote>
<p>Hat trotzdem jmd eine Lösung, wie ich beides (in einer Klasse) unterstützen könnte?</p>
</blockquote>
<p>Unsere Einwände stehen nicht ohne Grund da. Eventuell könnte deine Lösung ganz anders (wahrscheinlich einfacher) aussehen, aber dazu müsstest du einsehen, dass deine Vorgehensweise möglicherweise nicht die beste ist, und uns erklären, <em>was</em> du erreichen willst -- und nicht <em>wie</em> du dir eine spezifische Umsetzung vorstellst, ohne das Problem zu beschreiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2395054</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2395054</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 17 Apr 2014 11:30:16 GMT</pubDate></item><item><title><![CDATA[Reply to Template Parameter Pointer oder nicht on Thu, 17 Apr 2014 12:16:00 GMT]]></title><description><![CDATA[<p>Ok - danke für eure Antworten.<br />
Hab nun Variante 2 geschafft <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2395076</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2395076</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 17 Apr 2014 12:16:00 GMT</pubDate></item></channel></rss>