<?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[Unterschiedliche Funktionsaufrufe in Abhängigkeit von Lambda-Funktion-Parameter]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich würde gerne in Abhängigkeit von dem Parameter einer Lambda verschiedene<br />
Funktionen aufrufen.<br />
Gibt es eine Möglichkeit ohne den 'Umweg' std::function?</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;functional&gt;

template&lt;typename T&gt;
void doit(const std::vector&lt;T&gt;&amp; vec, std::function&lt;void (T)&gt; f){
	for (auto i : vec) {
		f(i);
	}
}

template&lt;typename T&gt;
void doit(const std::vector&lt;T&gt;&amp; vec, std::function&lt;void (const std::vector&lt;T&gt;&amp;)&gt; f){
	f(vec);
}

int main(){
	std::vector&lt;int&gt; vec;
	vec.push_back(1);
	vec.push_back(2);
	vec.push_back(3);
	auto f1 =
	//std::function&lt;void (int)&gt; f1 = 
		[](int i){ std::cout &lt;&lt; &quot;int&quot; &lt;&lt; std::endl; };
	auto f2 =
	//std::function&lt;void (const std::vector&lt;int&gt;&amp;)&gt; f2 = 
		[](const std::vector&lt;int&gt;&amp; i){ std::cout &lt;&lt; &quot;vec&quot; &lt;&lt; std::endl; };
	doit(vec, f1);
	doit(vec, f2);
}
</code></pre>
<p>Also nach Möglichkeit komplett ohne std::function</p>
<p>Gruß,<br />
XSpille</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/304816/unterschiedliche-funktionsaufrufe-in-abhängigkeit-von-lambda-funktion-parameter</link><generator>RSS for Node</generator><lastBuildDate>Sat, 27 Jun 2026 08:16:36 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/304816.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 14 Jun 2012 18:31:02 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Unterschiedliche Funktionsaufrufe in Abhängigkeit von Lambda-Funktion-Parameter on Thu, 14 Jun 2012 18:31:02 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich würde gerne in Abhängigkeit von dem Parameter einer Lambda verschiedene<br />
Funktionen aufrufen.<br />
Gibt es eine Möglichkeit ohne den 'Umweg' std::function?</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;functional&gt;

template&lt;typename T&gt;
void doit(const std::vector&lt;T&gt;&amp; vec, std::function&lt;void (T)&gt; f){
	for (auto i : vec) {
		f(i);
	}
}

template&lt;typename T&gt;
void doit(const std::vector&lt;T&gt;&amp; vec, std::function&lt;void (const std::vector&lt;T&gt;&amp;)&gt; f){
	f(vec);
}

int main(){
	std::vector&lt;int&gt; vec;
	vec.push_back(1);
	vec.push_back(2);
	vec.push_back(3);
	auto f1 =
	//std::function&lt;void (int)&gt; f1 = 
		[](int i){ std::cout &lt;&lt; &quot;int&quot; &lt;&lt; std::endl; };
	auto f2 =
	//std::function&lt;void (const std::vector&lt;int&gt;&amp;)&gt; f2 = 
		[](const std::vector&lt;int&gt;&amp; i){ std::cout &lt;&lt; &quot;vec&quot; &lt;&lt; std::endl; };
	doit(vec, f1);
	doit(vec, f2);
}
</code></pre>
<p>Also nach Möglichkeit komplett ohne std::function</p>
<p>Gruß,<br />
XSpille</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2223271</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2223271</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Thu, 14 Jun 2012 18:31:02 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Funktionsaufrufe in Abhängigkeit von Lambda-Funktion-Parameter on Thu, 14 Jun 2012 21:43:40 GMT]]></title><description><![CDATA[<p>Vielleicht sollte doit dann auch kein std::function als Argument entgegen nehmen. Wobei noch voellig unklar ist, was du erreichen moechtest und warum du auf <code>std::function</code> verzichten willst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2223359</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2223359</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Thu, 14 Jun 2012 21:43:40 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Funktionsaufrufe in Abhängigkeit von Lambda-Funktion-Parameter on Thu, 14 Jun 2012 21:59:33 GMT]]></title><description><![CDATA[<p><a href="http://stackoverflow.com/questions/7943525/is-it-possible-to-figure-out-the-parameter-type-and-return-type-of-a-lambda" rel="nofollow">http://stackoverflow.com/questions/7943525/is-it-possible-to-figure-out-the-parameter-type-and-return-type-of-a-lambda</a></p>
<p>Irgendwie doof dass C++11 nicht von sich aus funktionierende <code>function_traits</code> mitbringt <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2223372</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2223372</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 14 Jun 2012 21:59:33 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Funktionsaufrufe in Abhängigkeit von Lambda-Funktion-Parameter on Thu, 14 Jun 2012 22:08:17 GMT]]></title><description><![CDATA[<p>knivil schrieb:</p>
<blockquote>
<p>Vielleicht sollte doit dann auch kein std::function als Argument entgegen nehmen.</p>
</blockquote>
<p>Was soll ich denn für einen Typ nehmen?<br />
Also wenn ich einen Template-Parameter nehme, dann hab ich ja keine Informationen über den Parameter-Typ... Gibt es eine andere Alternative?</p>
<p>knivil schrieb:</p>
<blockquote>
<p>Wobei noch voellig unklar ist, was du erreichen moechtest und warum du auf <code>std::function</code> verzichten willst.</p>
</blockquote>
<p>Ich befinde mich in einer Template-Funktion, die einen Tupel übergeben kriegt und<br />
eines dieser Elemente ist eine Lambda-Funktion... Folglich weiß ich auch nicht, da mit std::make_tuple erstellt wurde, welche Funktion mit welchem Parameter die passende ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2223375</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2223375</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Thu, 14 Jun 2012 22:08:17 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Funktionsaufrufe in Abhängigkeit von Lambda-Funktion-Parameter on Thu, 14 Jun 2012 22:20:17 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p><a href="http://stackoverflow.com/questions/7943525/is-it-possible-to-figure-out-the-parameter-type-and-return-type-of-a-lambda" rel="nofollow">http://stackoverflow.com/questions/7943525/is-it-possible-to-figure-out-the-parameter-type-and-return-type-of-a-lambda</a></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>Ich danke euch beiden!!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2223379</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2223379</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Thu, 14 Jun 2012 22:20:17 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Funktionsaufrufe in Abhängigkeit von Lambda-Funktion-Parameter on Thu, 14 Jun 2012 23:14:13 GMT]]></title><description><![CDATA[<p>Damit es auch vollständig ist:</p>
<p>Hier ist eine Möglichkeit:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;functional&gt;

template&lt;typename TFunc&gt;
struct helper : helper&lt;decltype(&amp;TFunc::operator())&gt;{
};

template&lt;typename ClassType, typename ReturnType, typename Arg&gt;
struct helper&lt;ReturnType(ClassType::*)(Arg) const&gt;{
	template&lt;typename T&gt;
	void operator()(T t, const std::vector&lt;Arg&gt;&amp; arg){
		for(auto a:arg){
			t(a);
		}
	}
};

template&lt;typename ClassType, typename ReturnType, typename Arg&gt;
struct helper&lt;ReturnType(ClassType::*)(const std::vector&lt;Arg&gt;&amp;) const&gt;{
	template&lt;typename T&gt;
	void operator()(T t, const std::vector&lt;Arg&gt;&amp; arg){
		t(arg);
	}
};

template&lt;typename T, typename TFunc&gt;
void doit(const std::vector&lt;T&gt;&amp; vec, TFunc f){
	typedef decltype(f) function_type;
	helper&lt;function_type&gt; help;
	help(f, vec);
}

int main(){
	std::vector&lt;int&gt; vec;
	vec.push_back(1);
	vec.push_back(2);
	vec.push_back(3);
	auto f1 = [](int i){ std::cout &lt;&lt; &quot;int &quot; &lt;&lt; std::endl; };
	auto f2 = [](const std::vector&lt;int&gt;&amp; i){ std::cout &lt;&lt; &quot;vec &quot; &lt;&lt; std::endl; };
	doit(vec, f1);
	doit(vec, f2);
}
</code></pre>
<p>Gruß,<br />
XSpille</p>
<p>DANKE NOCHMAL!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2223383</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2223383</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Thu, 14 Jun 2012 23:14:13 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Funktionsaufrufe in Abhängigkeit von Lambda-Funktion-Parameter on Thu, 14 Jun 2012 23:48:05 GMT]]></title><description><![CDATA[<p>Als (schönere) Alternative mit Verwendung des function_traits:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;functional&gt;

template &lt;typename T&gt;
struct function_traits : public function_traits&lt;decltype(&amp;T::operator())&gt;{};
// For generic types, directly use the result of the signature of its 'operator()'

template &lt;typename ClassType, typename ReturnType, typename... Args&gt;
struct function_traits&lt;ReturnType(ClassType::*)(Args...) const&gt;
// we specialize for pointers to member function
{
    enum { arity = sizeof...(Args) };
    // arity is the number of arguments.

    typedef ReturnType result_type;

    template &lt;size_t i&gt;
    struct arg
    {
        typedef typename std::tuple_element&lt;i, std::tuple&lt;Args...&gt;&gt;::type type;
        // the i-th argument is equivalent to the i-th tuple element of a tuple
        // composed of those arguments.
    };
};

template&lt;typename T&gt;
struct typeinfo{};

template&lt;typename T, typename TFunc&gt;
void doit(const typeinfo&lt;T&gt;&amp;, const std::vector&lt;T&gt;&amp; vec, TFunc lambda){
	for(auto i : vec){
		lambda(i);
	}
}

template&lt;typename T, typename TFunc&gt;
void doit(const typeinfo&lt;const std::vector&lt;T&gt;&amp;&gt;&amp;, const std::vector&lt;T&gt;&amp; vec, TFunc lambda){
	lambda(vec);
}

template&lt;typename T, typename TFunc&gt;
void doit(const std::vector&lt;T&gt;&amp; vec, TFunc lambda){
	typedef function_traits&lt;decltype(lambda)&gt; traits;
	typedef typename traits::template arg&lt;0&gt;::type param_type;
	doit(typeinfo&lt;param_type&gt;(), vec, lambda);
}

int main(){
	std::vector&lt;int&gt; vec;
	vec.push_back(1);
	vec.push_back(2);
	vec.push_back(3);
	auto f1 = [](int i){ std::cout &lt;&lt; &quot;int &quot; &lt;&lt; std::endl; };
	auto f2 = [](const std::vector&lt;int&gt;&amp; i){ std::cout &lt;&lt; &quot;vec &quot; &lt;&lt; std::endl; };
	doit(vec, f1);
	doit(vec, f2);
}
</code></pre>
<p>Gruß,<br />
XSpille</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2223385</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2223385</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Thu, 14 Jun 2012 23:48:05 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Funktionsaufrufe in Abhängigkeit von Lambda-Funktion-Parameter on Fri, 15 Jun 2012 10:59:18 GMT]]></title><description><![CDATA[<p>Das ist aber nicht schön.</p>
<p>Schöner ist das hier:</p>
<pre><code class="language-cpp">template&lt;class T, class...Dummy&gt;
using alias = T;

template&lt;typename T, typename Func&gt;
auto doit(const std::vector&lt;T&gt;&amp; vec, Func func) -&gt; alias&lt;void,
  decltype( func(vec[0]) )&gt; // SFINAE expression test
{
    for(auto&amp; i : vec){
        func(i);
    }
}

template&lt;typename T, typename Func&gt;
auto doit(const std::vector&lt;T&gt;&amp; vec, Func func) -&gt; alias&lt;void,
  decltype( func(vec) )&gt; // SFINAE expression test
{
    func(i);
}
</code></pre>
<p>Getestet hab ich's jetzt aber nicht.</p>
<p>Jedenfalls sollte man sich nicht auf so etwas wie function_traits verlassen, da der Funktionsaufrufoperator des Funktors mehrfach überladen sein könnte. Wichtig ist ja nur, ob ein bestimmter Aufruf funktioniert oder eben nicht. Und das kann man dann einfach testen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2223416</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2223416</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Fri, 15 Jun 2012 10:59:18 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Funktionsaufrufe in Abhängigkeit von Lambda-Funktion-Parameter on Sun, 24 Jun 2012 00:48:20 GMT]]></title><description><![CDATA[<p>Danke krümelkacker!</p>
<p>Nachdem ich endlich mein Macports aktualisiert habe um gcc 4.7 zu installieren,<br />
da es template aliasing unterstützt, stelle ich nun fest, dass es leider wegen einer redefinition nicht so funktioniert.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;

template&lt;class T, class... Dummy&gt;
using alias = T; 

template&lt;typename T, typename Func&gt; 
auto doit(const std::vector&lt;T&gt;&amp; vec, Func func) -&gt; alias&lt;void, decltype( func(vec) )&gt; // SFINAE expression test 
{ 
}

template&lt;typename T, typename Func&gt; 
auto doit(const std::vector&lt;T&gt;&amp; vec, Func func) -&gt; alias&lt;void, decltype( func(vec[0]) )&gt; // SFINAE expression test
{ 
}

int main(){
	std::vector&lt;int&gt; vec;
	auto f1 = [](int i){ std::cout &lt;&lt; &quot;int &quot; &lt;&lt; std::endl; };
	auto f2 = [](const std::vector&lt;int&gt;&amp; i){ std::cout &lt;&lt; &quot;vec &quot; &lt;&lt; std::endl; };
	//doit(vec, f1);
	//doit(vec, f2);
}
</code></pre>
<blockquote>
<p>test.cpp:13:6: error: redefinition of 'template&lt;class T, class Func&gt; alias&lt;void, decltype (func(vec[0]))&gt; doit(const std::vector&lt;T&gt;&amp;, Func)'<br />
test.cpp:8:6: error: 'template&lt;class T, class Func&gt; alias&lt;void, decltype (func(vec))&gt; doit(const std::vector&lt;T&gt;&amp;, Func)' previously declared here</p>
</blockquote>
<p>Also generell verstehe ich, dass der Compiler meckert, weil beide Funktionen ja die gleichen Signaturen haben.</p>
<p>Gibt es dafür eine (einfache) Lösung, um diesen Fehler zu beseitigen?</p>
<p>Gruß,<br />
XSpille</p>
<p>EDIT: gcc 4.8 meckert auch wegen einer redefinition</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2226562</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2226562</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Sun, 24 Jun 2012 00:48:20 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Funktionsaufrufe in Abhängigkeit von Lambda-Funktion-Parameter on Sun, 24 Jun 2012 09:03:54 GMT]]></title><description><![CDATA[<p>SFINAE ist schon das richtige Stichwort, nur muss es eben über die Parameter gemacht werden.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;

template&lt;typename T, typename Func&gt;
void doit(const std::vector&lt;T&gt;&amp; vec, Func func, decltype(func(vec))* = nullptr)
{
	func(vec);
}

template&lt;typename T, typename Func&gt;
void doit(const std::vector&lt;T&gt;&amp; vec, Func func, decltype(func(vec[0]))* = nullptr)
{
	for(const T&amp; t : vec)
		func(t);
}

int main(){
    std::vector&lt;int&gt; vec { 1, 2, 3 };
    auto f1 = [](int i){ std::cout &lt;&lt; &quot;int &quot; &lt;&lt; std::endl; };
    auto f2 = [](const std::vector&lt;int&gt;&amp; i){ std::cout &lt;&lt; &quot;vec &quot; &lt;&lt; std::endl; };
    doit(vec, f1);
    doit(vec, f2);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2226597</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2226597</guid><dc:creator><![CDATA[ipsec]]></dc:creator><pubDate>Sun, 24 Jun 2012 09:03:54 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Funktionsaufrufe in Abhängigkeit von Lambda-Funktion-Parameter on Sun, 24 Jun 2012 10:46:53 GMT]]></title><description><![CDATA[<p>ipsec schrieb:</p>
<blockquote>
<p>SFINAE ist schon das richtige Stichwort, nur muss es eben über die Parameter gemacht werden.</p>
</blockquote>
<p>Das ist ein Möglichkeit. Man kann auch die Templateparameter variieren</p>
<pre><code class="language-cpp">template&lt;typename T, typename Func, typename = decltype(std::declval&lt;Func&gt;()(std::declval&lt;const std::vector&lt;T&gt;&amp;&gt;()))&gt;
void doit(const std::vector&lt;T&gt;&amp; vec, Func func)
{
    func(vec);
}

template&lt;typename T, typename Func, typename = void, typename = decltype(std::declval&lt;Func&gt;()(std::declval&lt;const std::vector&lt;T&gt;&amp;&gt;()[0]))&gt;
void doit(const std::vector&lt;T&gt;&amp; vec, Func func)
{
    for(const T&amp; t : vec)
        func(t);
}
</code></pre>
<p>Aber auch mit dem Rückgabewert funktioniert es, sofern man das Aliastemplate geeignet schreibt (bzw. gleich darauf verzichtet).</p>
<pre><code class="language-cpp">template &lt;typename T, typename...&gt; struct helper
{
    using type = T;
};

template&lt;class T, class... Dummy&gt;
using alias = typename helper&lt;T, Dummy...&gt;::type;

template&lt;typename T, typename Func&gt;
auto doit(const std::vector&lt;T&gt;&amp; vec, Func func) -&gt; alias&lt;void, decltype( func(vec) )&gt;
{
    func(vec);
}

template&lt;typename T, typename Func&gt;
auto doit(const std::vector&lt;T&gt;&amp; vec, Func func) -&gt; alias&lt;void, decltype( func(vec[0]) )&gt;
{
    for(const T&amp; t : vec)
        func(t);
}
</code></pre>
<p>Das Problem mit dem Aliastemplate allein liegt darin, dass die Substitution des Aliastyps unmittelbar bei in der Definition des Funktionstemplates stattfindet (und dieser Typ dann offenbar nur von T=void abhängt), während bei einem Klassentemplate die Substitution erst bei der Instantiierung durchgeführt werden kann.<br />
Also im Prinzip eager vs. lazy evaluation.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2226629</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2226629</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 24 Jun 2012 10:46:53 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Funktionsaufrufe in Abhängigkeit von Lambda-Funktion-Parameter on Sun, 24 Jun 2012 15:24:10 GMT]]></title><description><![CDATA[<p>DANKE ipsec für die Lösung, die ich favorisiere</p>
<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>DANKE camper für Alternativen dazu</p>
<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>
]]></description><link>https://www.c-plusplus.net/forum/post/2226743</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2226743</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Sun, 24 Jun 2012 15:24:10 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Funktionsaufrufe in Abhängigkeit von Lambda-Funktion-Parameter on Sun, 24 Jun 2012 15:30:41 GMT]]></title><description><![CDATA[<p>Eine Frage hab ich doch noch...</p>
<p>Gibt es Vor-/Nachteile, ob man SFINAE über einen normalen Parameter, einen Template-Parameter oder Rückgabetyp macht (abgesehen von Notationsvorzügen)?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2226745</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2226745</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Sun, 24 Jun 2012 15:30:41 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Funktionsaufrufe in Abhängigkeit von Lambda-Funktion-Parameter on Sun, 24 Jun 2012 15:40:58 GMT]]></title><description><![CDATA[<p>XSpille schrieb:</p>
<blockquote>
<p>Eine Frage hab ich doch noch...</p>
<p>Gibt es Vor-/Nachteile, ob man SFINAE über einen normalen Parameter, einen Template-Parameter oder Rückgabetyp macht (abgesehen von Notationsvorzügen)?</p>
</blockquote>
<p>Ich zähle einfach mal die Nachteile jeder Variante gegenüber den anderen beiden auf, wie sie mri in den Sinn kommen:<br />
1. Über zusätzlichen Funktionsparameter: ändert die Funktionssignatur, nicht möglich bei Operatorüberladung (außer ggf. () und Postfix ++/--), weil die die Parameterzahl feststeht.<br />
2. über Rückgabetyp: nicht möglich bei Konstruktoren/Konvertierungsoperatoren<br />
3. Über Defaultargumente für Templateparameter: benötigt C++11-Unterstützung, benötigt zusätzliche Dummyparameter, um die Templates auseinanderzuhalten (Defaultargumente sind nicht Teil der Signatur).</p>
<p>Im Allgemeinen sollte die konkrete Wahl keine Rolle spielen, also immer das wählen, was am besten zu lesen ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2226751</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2226751</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 24 Jun 2012 15:40:58 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Funktionsaufrufe in Abhängigkeit von Lambda-Funktion-Parameter on Sun, 24 Jun 2012 15:46:11 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>XSpille schrieb:</p>
<blockquote>
<p>Eine Frage hab ich doch noch...</p>
<p>Gibt es Vor-/Nachteile, ob man SFINAE über einen normalen Parameter, einen Template-Parameter oder Rückgabetyp macht (abgesehen von Notationsvorzügen)?</p>
</blockquote>
<p>Ich zähle einfach mal die Nachteile jeder Variante gegenüber den anderen beiden auf, wie sie mri in den Sinn kommen:<br />
1. Über zusätzlichen Funktionsparameter: ändert die Funktionssignatur, nicht möglich bei Operatorüberladung (außer ggf. () und Postfix ++/--), weil die die Parameterzahl feststeht.<br />
2. über Rückgabetyp: nicht möglich bei Konstruktoren/Konvertierungsoperatoren<br />
3. Über Defaultargumente für Templateparameter: benötigt C++11-Unterstützung, benötigt zusätzliche Dummyparameter, um die Templates auseinanderzuhalten (Defaultargumente sind nicht Teil der Signatur).</p>
<p>Im Allgemeinen sollte die konkrete Wahl keine Rolle spielen, also immer das wählen, was am besten zu lesen ist.</p>
</blockquote>
<p>DANKE camper für diese Analyse!</p>
<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>
]]></description><link>https://www.c-plusplus.net/forum/post/2226755</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2226755</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Sun, 24 Jun 2012 15:46:11 GMT</pubDate></item></channel></rss>