<?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 Spezialisierung - Rückgabetyp anhand Template-Parameter]]></title><description><![CDATA[<p>Ich habe folgende Template-Funktionen:</p>
<pre><code class="language-cpp">template &lt;int i, typename T&gt;
T foo()
{}

template&lt;&gt;
int foo&lt;1&gt;()
{
    return 1;
}

template&lt;&gt;
std::string foo&lt;2&gt;()
{
    return std::string(&quot;test&quot;);
}
</code></pre>
<p>Der Aufruf sieht dann z. B. so aus:</p>
<pre><code class="language-cpp">int main()
{
    std::string str = foo&lt;2, std::string&gt;();
}
</code></pre>
<p>Meine Frage ist jetzt ob man das auch irgendwie so lösen kann, dass ich statt</p>
<pre><code class="language-cpp">std::string str = foo&lt;2, std::string&gt;();
</code></pre>
<p>nur</p>
<pre><code class="language-cpp">std::string str = foo&lt;2&gt;();
</code></pre>
<p>schreiben kann. Also den zweiten Template-Parameter (den Typ) weg lassen kann.</p>
<p><strong>// Edit</strong></p>
<p>So würde es funktionieren. Vielleicht wird dadurch klarer was ich eigentlich will <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>
<pre><code class="language-cpp">template &lt;int i, typename T&gt;
struct foo
{};

template&lt;&gt;
struct foo&lt;1, std::string&gt;
{
    std::string t;
};

template&lt;&gt;
struct foo&lt;2, std::string&gt;
{
    int t;
};

template&lt;int i&gt;
struct bar
{
    foo&lt;i, std::string&gt; f;
};

int main()
{
    std::cout &lt;&lt; bar&lt;1&gt;().f.t &lt;&lt; std::endl;
    std::cout &lt;&lt; bar&lt;2&gt;().f.t;
}
</code></pre>
<p>Gibt es da ne elegantere Möglichkeit?</p>
<p><strong>// Edit 2</strong></p>
<p>Ich stand wohl irgendwie aufm Schlauch, weil ich so auf Funktionstemplates fixiert war und es anschließend mit Structs versucht hab.</p>
<p>So sieht nun die Lösung aus, ich frag mich wieso ich da net gleich drauf gekommen bin <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<pre><code class="language-cpp">template &lt;int i&gt;
struct foo
{};

template&lt;&gt;
struct foo&lt;1&gt;
{
    std::string t;
};

template&lt;&gt;
struct foo&lt;2&gt;
{
    int t;
};
</code></pre>
<p>Kann man Threads löschen lassen? <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>
]]></description><link>https://www.c-plusplus.net/forum/topic/267315/gelöst-template-spezialisierung-rückgabetyp-anhand-template-parameter</link><generator>RSS for Node</generator><lastBuildDate>Wed, 02 Sep 2026 14:26:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/267315.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 22 May 2010 09:03:02 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [gelöst] Template Spezialisierung - Rückgabetyp anhand Template-Parameter on Sat, 22 May 2010 13:48:37 GMT]]></title><description><![CDATA[<p>Ich habe folgende Template-Funktionen:</p>
<pre><code class="language-cpp">template &lt;int i, typename T&gt;
T foo()
{}

template&lt;&gt;
int foo&lt;1&gt;()
{
    return 1;
}

template&lt;&gt;
std::string foo&lt;2&gt;()
{
    return std::string(&quot;test&quot;);
}
</code></pre>
<p>Der Aufruf sieht dann z. B. so aus:</p>
<pre><code class="language-cpp">int main()
{
    std::string str = foo&lt;2, std::string&gt;();
}
</code></pre>
<p>Meine Frage ist jetzt ob man das auch irgendwie so lösen kann, dass ich statt</p>
<pre><code class="language-cpp">std::string str = foo&lt;2, std::string&gt;();
</code></pre>
<p>nur</p>
<pre><code class="language-cpp">std::string str = foo&lt;2&gt;();
</code></pre>
<p>schreiben kann. Also den zweiten Template-Parameter (den Typ) weg lassen kann.</p>
<p><strong>// Edit</strong></p>
<p>So würde es funktionieren. Vielleicht wird dadurch klarer was ich eigentlich will <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>
<pre><code class="language-cpp">template &lt;int i, typename T&gt;
struct foo
{};

template&lt;&gt;
struct foo&lt;1, std::string&gt;
{
    std::string t;
};

template&lt;&gt;
struct foo&lt;2, std::string&gt;
{
    int t;
};

template&lt;int i&gt;
struct bar
{
    foo&lt;i, std::string&gt; f;
};

int main()
{
    std::cout &lt;&lt; bar&lt;1&gt;().f.t &lt;&lt; std::endl;
    std::cout &lt;&lt; bar&lt;2&gt;().f.t;
}
</code></pre>
<p>Gibt es da ne elegantere Möglichkeit?</p>
<p><strong>// Edit 2</strong></p>
<p>Ich stand wohl irgendwie aufm Schlauch, weil ich so auf Funktionstemplates fixiert war und es anschließend mit Structs versucht hab.</p>
<p>So sieht nun die Lösung aus, ich frag mich wieso ich da net gleich drauf gekommen bin <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<pre><code class="language-cpp">template &lt;int i&gt;
struct foo
{};

template&lt;&gt;
struct foo&lt;1&gt;
{
    std::string t;
};

template&lt;&gt;
struct foo&lt;2&gt;
{
    int t;
};
</code></pre>
<p>Kann man Threads löschen lassen? <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1901027</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1901027</guid><dc:creator><![CDATA[Max0r]]></dc:creator><pubDate>Sat, 22 May 2010 13:48:37 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Template Spezialisierung - Rückgabetyp anhand Template-Parameter on Sat, 22 May 2010 09:55:39 GMT]]></title><description><![CDATA[<p>Max0r schrieb:</p>
<blockquote>
<p>Kann man Threads löschen lassen? <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>
</blockquote>
<p>Nur im Notfall. Man kann sie stehen lassen dass andere sich das durchlesen können und evtl. Lösungen für ihr eigenen Probleme finden <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="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1901047</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1901047</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Sat, 22 May 2010 09:55:39 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Template Spezialisierung - Rückgabetyp anhand Template-Parameter on Sat, 22 May 2010 13:49:52 GMT]]></title><description><![CDATA[<p>Max0r schrieb:</p>
<blockquote>
<p>So sieht nun die Lösung aus, ich frag mich wieso ich da net gleich drauf gekommen bin <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<pre><code class="language-cpp">template &lt;int i&gt;
struct foo
{};

template&lt;&gt;
struct foo&lt;1&gt;
{
    std::string t;
};

template&lt;&gt;
struct foo&lt;2&gt;
{
    int t;
};
</code></pre>
</blockquote>
<p>So kannst du aber nicht entweder <code>std::string</code> oder <code>int</code> zurückgeben, sondern nur die jeweilige Wrapper-Struktur. Meinst du nicht vielleicht sowas?</p>
<pre><code class="language-cpp">template &lt;int i&gt;
struct foo; // Keine Definition

template&lt;&gt;
struct foo&lt;1&gt;
{
    typedef std::string type;
};

template&lt;&gt;
struct foo&lt;2&gt;
{
    typedef int type;
};

template &lt;int i&gt;
typename foo&lt;i&gt;::type bar();
</code></pre>
<p>Wobei mir zwei benannte Funktionen sinnvoller scheinen, wenn die beiden <code>bar()</code> s was anderes tun. Denn nur weil man Templates nutzen kann, müssen sie nicht immer angebracht sein. <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="😉"
    /></p>
<pre><code class="language-cpp">std::string bar1();
int bar2();
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1901150</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1901150</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 22 May 2010 13:49:52 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Template Spezialisierung - Rückgabetyp anhand Template-Parameter on Sat, 22 May 2010 14:00:54 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Max0r schrieb:</p>
<blockquote>
<p>So sieht nun die Lösung aus, ich frag mich wieso ich da net gleich drauf gekommen bin <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<pre><code class="language-cpp">template &lt;int i&gt;
struct foo
{};

template&lt;&gt;
struct foo&lt;1&gt;
{
    std::string t;
};

template&lt;&gt;
struct foo&lt;2&gt;
{
    int t;
};
</code></pre>
</blockquote>
<p>So kannst du aber nicht entweder <code>std::string</code> oder <code>int</code> zurückgeben, sondern nur die jeweilige Wrapper-Struktur. Meinst du nicht vielleicht sowas?</p>
<pre><code class="language-cpp">/*...*/
</code></pre>
</blockquote>
<p>Nein, ich hab schon das gemeint was ich geschrieben hab.</p>
<p>Nexus schrieb:</p>
<blockquote>
<p>Wobei mir zwei benannte Funktionen sinnvoller scheinen, wenn die beiden bar()s was anderes tun. Denn nur weil man Templates nutzen kann, müssen sie nicht immer angebracht sein. <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="😉"
    /></p>
</blockquote>
<p>Ich wollte es eben vermeiden, verschiedene Funktionen anzubieten und es besser über eine einzige machen (bzw. Struktur mit den Daten, die ich brauch).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1901153</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1901153</guid><dc:creator><![CDATA[Max0r]]></dc:creator><pubDate>Sat, 22 May 2010 14:00:54 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Template Spezialisierung - Rückgabetyp anhand Template-Parameter on Sat, 22 May 2010 14:03:50 GMT]]></title><description><![CDATA[<p>Max0r schrieb:</p>
<blockquote>
<p>Ich wollte es eben vermeiden, verschiedene Funktionen anzubieten und es besser über eine einzige machen (bzw. Struktur mit den Daten, die ich brauch).</p>
</blockquote>
<p>Zwei verschiedene Funktionen hast du ohnehin. Ich meine nur, Templates haben primär den Zweck, viele Anwendungsfälle generisch zu behandeln. Wenn man nur zwei Fälle hat und diese jeweils spezialisiert behandeln muss, kann man geradeso gut auf Templates verzichten und ein Konzept wie Überladung einsetzen. Dann benötigt man auch viel weniger Code.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1901155</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1901155</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 22 May 2010 14:03:50 GMT</pubDate></item></channel></rss>