{"id":2867,"date":"2017-03-14T06:53:51","date_gmt":"2017-03-14T05:53:51","guid":{"rendered":"http:\/\/roboblog.fatal-fury.de\/?p=2867"},"modified":"2017-03-14T09:11:30","modified_gmt":"2017-03-14T08:11:30","slug":"todo-c-guns-funktion-return-unterschiedliche-lambda-funktionen-geht-das","status":"publish","type":"post","link":"http:\/\/roboblog.fatal-fury.de\/?p=2867","title":{"rendered":"C++ Guns - Funktion return unterschiedliche lambda Funktionen"},"content":{"rendered":"<p>Na sicher geht das. Zur Compilezeit wie auch zur Laufzeit.<br \/>\nZur Compilezeit w\u00e4re if constexpr angebracht, aber das kann mein Compiler noch nicht. Mit Templates w\u00e4r das wieder overload. Also nehm ich stink normales Funktion \u00fcberladen mit Tags.<\/p>\n<pre><code>\r\nstruct Add_tag {};\r\nstruct Mult_tag {};\r\n\r\nauto func1(int x, Add_tag) {\r\n    return [x](int y){ return x+y; };\r\n}\r\n\r\nauto func1(int x, Mult_tag) {\r\n    return [x](int y){ return x*y; };\r\n}\r\n\r\nint main() {\r\n    cout << func1(2, Mult_tag())(3) << \"\\n\";\r\n    return 0;\r\n}\r\n<\/code><\/pre>\n<p>Zur Laufzeit f\u00e4llt mir std::function ein. Mit den \u00fcblichen Performancefressern.<\/p>\n<pre><code>\r\nenum class Operator {ADD, MULT};\r\n\r\nstd::function<int(int)> func1(int x, Operator op) {\r\n    switch(op) {\r\n    case Operator::ADD:  return [x](int y){ return x+y; };\r\n    case Operator::MULT: return [x](int y){ return x*y; };\r\n    }\r\n}\r\n\r\nint main() {\r\n    Operator op = Operator::MULT;\r\n    cout << func1(2, op)(3) << \"\\n\";\r\n    return 0;\r\n}\r\n<\/code><\/pre>\n<p>H\u00fcbsch? Naaah. Braucht man? Bisher nicht.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Na sicher geht das. Zur Compilezeit wie auch zur Laufzeit. Zur Compilezeit w\u00e4re if constexpr angebracht, aber das kann mein Compiler noch nicht. Mit Templates w\u00e4r das wieder overload. Also nehm ich stink normales Funktion \u00fcberladen mit Tags. struct Add_tag {}; struct Mult_tag {}; auto func1(int x, Add_tag) { return [x](int y){ return x+y; }; [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[17],"class_list":["post-2867","post","type-post","status-publish","format-standard","hentry","category-allgemein","tag-cpp"],"_links":{"self":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/2867","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2867"}],"version-history":[{"count":3,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/2867\/revisions"}],"predecessor-version":[{"id":2870,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/2867\/revisions\/2870"}],"wp:attachment":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2867"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2867"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2867"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}