{"id":2561,"date":"2022-05-15T14:07:22","date_gmt":"2022-05-15T14:07:22","guid":{"rendered":"https:\/\/www.yazilimperver.com\/?p=2561"},"modified":"2022-05-15T14:12:38","modified_gmt":"2022-05-15T14:12:38","slug":"haftalik-c-49-generic-lambda-ve-lambda-capture-initializers","status":"publish","type":"post","link":"https:\/\/www.yazilimperver.com\/index.php\/2022\/05\/15\/haftalik-c-49-generic-lambda-ve-lambda-capture-initializers\/","title":{"rendered":"Haftal\u0131k C++ 49 &#8211; &#8220;Generic Lambda&#8221; ve &#8220;Lambda Capture Initializers&#8221;"},"content":{"rendered":"<p>Merhaba yaz\u0131l\u0131mperver dostlar\u0131m, C++ 14 yaz\u0131lar\u0131m\u0131za devam ediyoruz.<br \/>\nBu yaz\u0131mda kalan C++ 14 \u00f6zelliklerinden olan Jenerik Lambda (&#8220;Generik Lambda&#8221;) ve &#8220;lambda capture initializers&#8221; kabiliyetlerine bak\u0131yor olaca\u011f\u0131z. Bu iki kabiliyeti, daha \u00f6nce C++ 11 ile sunulan Lambda kabiliyetleri \u00fczerene yap\u0131lan iyile\u015ftirmeler olarak g\u00f6rebilirsiniz. Bu sebeple e\u011fer daha \u00f6nce incelemediyseniz a\u015fa\u011f\u0131daki yaz\u0131ma g\u00f6z atman\u0131z\u0131 \u015fiddetle tavsiye ediyorum:<\/p>\n<p><span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/www.yazilimperver.com\/index.php\/2018\/07\/19\/modern-c-6-lambda-ifadeleri\/\">Modern C++ (6) : Lambda \u0130fadeleri<\/a><\/strong><\/span><\/p>\n<p>Ayr\u0131ca mevcut C++ 14 kabiliyetleri yolculu\u011fundaki durumumuz i\u00e7in de\u00a0<span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/www.yazilimperver.com\/index.php\/2021\/11\/30\/c-14-kabiliyetler-yolcugu\/\">C++ 14 Kabiliyetler Yolcu\u011fu<\/a><\/strong><\/span> yaz\u0131s\u0131ndan takip edebilirsiniz.\u00a0Haydi ba\u015flayal\u0131m.<\/p>\n<h2><span style=\"color: #0000ff;\"><strong>Jenerik Lambda \u0130fadeleri (&#8220;Generic Lambda&#8221;)<\/strong><\/span><\/h2>\n<p>Bu kabiliyeti k\u0131saca \u00f6zetlemek i\u00e7in asl\u0131nda C++ 11 de sunulan ve C++ 14 ile eklenen hususlara, jenerik lambda perspektifinde bakmakta fayda var. C++ 11 ile lambdaya ge\u00e7irilen fonksiyon parametreleri sadece &#8220;pass-by-value&#8221; ve &#8220;pass-by-reference&#8221; mekanizmalar\u0131 ile ge\u00e7irilebilmekteydi. Bir di\u011fer ifade ile, ta\u015f\u0131ma semanti\u011fi ile sunulan tipleri lambdalar ile direk kullanman\u0131z m\u00fcmk\u00fcn olam\u0131yordu ve auto da kullan\u0131lamamaktayd\u0131.<\/p>\n<p>Bu arada, bu mekanizmalara ve ta\u015f\u0131ma semanti\u011fine ili\u015fkin pek bir fikriniz yok ise, bu yaz\u0131ya devam etmeden \u00f6nce bunlara ili\u015fkin bir fikir sahibi olman\u0131zda fayda var. Bu ba\u011flamda, a\u015fa\u011f\u0131daki yaz\u0131m sizlere, hem bu mekanizmalar hem de jenerik lambdalar ile sunulan kabiliyeti anlaman\u0131za yard\u0131mc\u0131 olabilir:<\/p>\n<p><strong><span style=\"color: #008000;\"><a style=\"color: #008000;\" href=\"https:\/\/www.yazilimperver.com\/index.php\/2018\/03\/16\/modern-c-5-tasima-semantikleri\/\">Modern C++ (5) : Ta\u015f\u0131ma Semantikleri<\/a><\/span><\/strong><\/p>\n<p>C++ 14 ile birlikte art\u0131k lambda fonksiyon parametreleri i\u00e7in de auto ve ta\u015f\u0131ma semanti\u011fine uygun tipler kullanabiliyoruz. Bununla birlikte, herhangi bir ifade ile ilklendirme de m\u00fcmk\u00fcn olabilmekte (bir sonraki ba\u015fl\u0131kta bak\u0131yor olaca\u011f\u0131z). Hemen basit bir \u00f6rne\u011fe bakal\u0131m:<\/p>\n<pre class=\"lang:c++ decode:true \">void genericLambdaExample() { \r\n    \/\/ Oncelikle bu C++ 11 ile mumkun degildi \r\n    auto generic = [](auto x, auto y) { return x+y; }; \r\n    \r\n    \/\/ Int, int ve double, double i\u00e7in iki ayr\u0131 kullan\u0131m da art\u0131k m\u00fcmk\u00fcn \r\n    std::cout &lt;&lt; generic(1, 2) &lt;&lt; std::endl; \r\n    std::cout &lt;&lt; generic(1.1, 2.2) &lt;&lt; std::endl; \r\n}<\/pre>\n<p>Burada g\u00f6rd\u00fc\u011f\u00fcn\u00fcz \u00fczere, tek bir lambda ifadesini, farkl\u0131 girdiler i\u00e7in kullanabiliyoruz ve derleyici sa\u011folsun bizler i\u00e7in arka tarafta gerekli kodlar\u0131 \u00fcretiyor. Merakl\u0131 takip\u00e7ilerimin bu kod par\u00e7as\u0131n\u0131 hemen <span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/gcc.godbolt.org\/\">CompilerExplorer<\/a> <\/strong><\/span>ile inceleyip, \u00fczerinde oynay\u0131p, arkada \u00fcretilen kodun nas\u0131l de\u011fi\u015fti\u011fine bakt\u0131\u011f\u0131n\u0131 umuyorum \ud83d\ude42<\/p>\n<p>Peki yukar\u0131daki kod par\u00e7as\u0131n\u0131 derleyici nas\u0131l de\u011ferlendiriyor ya da lambda&#8217;lar olmasayd\u0131 bunu nas\u0131l elde ederdik? Asl\u0131nda bakarsan\u0131z, temelde benzer davran\u0131\u015f\u0131 a\u015fa\u011f\u0131daki gibi bir kod par\u00e7as\u0131 ile de elde edebiliriz:<\/p>\n<pre class=\"lang:default decode:true \">struct _auto_generated_lambda_type { \r\n        template &lt;typename T, typename U&gt; \r\n        auto operator() (T x, U y) const {return x + y;} \r\n};<\/pre>\n<p>Tabi, bunun yan\u0131nda art\u0131k &#8220;perfect forwarding&#8221; de m\u00fcmk\u00fcn olabilmekte, daha do\u011frusu ta\u015f\u0131ma mekanizmas\u0131n\u0131 da kullanabilece\u011fiz ve art\u0131k a\u015fa\u011f\u0131daki kullan\u0131mlara m\u00fcmk\u00fcn olabilecek:<\/p>\n<pre class=\"lang:c++ decode:true\">auto lamb1 = [](int&amp;&amp; x) {return x + 5; }; \r\nauto lamb2 = [](auto&amp;&amp; x) {return x + 5; };\r\n\r\nint x = 10;\r\n\r\n\/\/ Burada a\u00e7\u0131k olarak `std::move(x)` kullanmal\u0131y\u0131z. \u00c7\u00fcnk\u00fc `int&amp;&amp;` bekliyoruz.\r\nlamb1(std::move(x)); \r\n\r\n\/\/ Bu da ge\u00e7erli, \u00e7\u00fcnk\u00fc burada x tipi `int&amp;` olarak \u00e7\u0131kar\u0131m yapabiliyor, \u00e7\u00fcnk\u00fc auto kullan\u0131m\u0131 var.\r\nlamb2(x);<\/pre>\n<p>Benzer \u015fekilde, arg\u00fcmanlar\u0131n aktar\u0131lmas\u0131 ve &#8220;variadic&#8221; kullan\u0131m da m\u00fcmk\u00fcn:<\/p>\n<pre class=\"lang:c++ decode:true \">\/\/ \"Variadic\" kullan\u0131ma \u00f6rnek\r\nauto genericLambda = [](auto&amp;&amp;... args){return f(std::forward&lt;decltype(args)&gt;(args)...);};\r\n\r\n\/\/ Arg\u00fcmanlar\u0131n aktar\u0131lmas\u0131na \u00f6rnek\r\nauto genericLambda = [](auto&amp;&amp;... args){return f(decltype(args)(args)...);};<\/pre>\n<p>Yukar\u0131daki \u00f6rnek kullan\u0131mlar yan\u0131nda, jenerik lambdalar ile \u00f6zyinelemeli lambda tan\u0131mlamalar\u0131 da daha temiz ve okunabilir \u015fekilde tan\u0131mlanabilmekteymi\u015f. \u00d6rne\u011fin a\u015fa\u011f\u0131da, fibonacci hesaplamak i\u00e7in kullan\u0131labilecek bir kod par\u00e7as\u0131n\u0131 g\u00f6rebilirsiniz:<\/p>\n<pre class=\"lang:c++ decode:true\">auto fib = [](int n, auto&amp;&amp; fib) {\r\n if (n &lt;= 1)\r\n     return n; \r\n  return fib(n - 1, fib) + fib(n - 2, fib); \r\n};\r\n\r\nauto i = fib(7, fib);<\/pre>\n<p>Bununla ne kadar i\u015finiz olur bilemiyorum ama daha detayl\u0131 bilgi almak i\u00e7in <span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/artificial-mind.net\/blog\/2020\/09\/12\/recursive-lambdas\">https:\/\/artificial-mind.net\/blog\/2020\/09\/12\/recursive-lambdas<\/a><\/strong><\/span> sayfas\u0131na g\u00f6z atabilirsiniz.<\/p>\n<p>Jenerik lambdalar\u0131n son bir kullan\u0131m\u0131ndan daha bahsetmek istiyorum. O da, herhangi bir yakalama parametresi olmayan lambda ifadelerinin fonksiyon i\u015fsaret\u00e7ilerine atanmas\u0131 olacak. \u00d6rne\u011fin art\u0131k a\u015fa\u011f\u0131daki ifade kullan\u0131labilir olacak:<\/p>\n<pre class=\"lang:c++ decode:true \">int (*fp)(int, char) = [](auto a, auto b){ return a + b; };<\/pre>\n<p>Sonu\u00e7 olarak, bu kabiliyet ile ne elde ediliyor diye sorabiliriz? \u015eu elde ediliyor, modern C++ ile hedeflenen daha az kod sat\u0131r\u0131 ile daha okunabilir ve idame edilebilir kodlar elde etmemize olanak sa\u011flan\u0131yor. <span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/isocpp.org\/wiki\/faq\/cpp14-language#generic-lambdas\">\u015eu sayfadan<\/a><\/strong><\/span> bir \u00f6rnek ile bu ba\u015fl\u0131\u011f\u0131 kapatal\u0131m:<\/p>\n<p>C++11 ile yaz\u0131lan a\u015fa\u011f\u0131daki kodlar:<\/p>\n<pre class=\"lang:c++ decode:true\">for_each( begin(v), end(v), [](decltype(*cbegin(v)) x) { cout &lt;&lt; x; } );\r\n\r\nsort( begin(w), end(w), [](const shared_ptr&lt;some_type&gt;&amp; a,\r\n                          const shared_ptr&lt;some_type&gt;&amp; b) { return *a&lt;*b; } );<\/pre>\n<p>C++ 14 ile a\u015fa\u011f\u0131daki hale d\u00f6n\u00fc\u015febilmekteler:<\/p>\n<pre class=\"lang:c++ decode:true\">for_each( begin(v), end(v), [](const auto&amp; x) { cout &lt;&lt; x; } );\r\n\r\nsort( begin(w), end(w), [](const auto&amp; a, const auto&amp; b) { return *a&lt;*b; } );<\/pre>\n<p>ikincisi daha okunabilir de\u011fil mi?<\/p>\n<h2><strong><span style=\"color: #0000ff;\">Lambda Capture Initializer<\/span><\/strong><\/h2>\n<p>Bir \u00f6nceki ba\u015fl\u0131kta ifade etti\u011fim, lambda ifade arg\u00fcmanlar\u0131 yan\u0131nda, lambda kullan\u0131mlar\u0131nda art\u0131k herhangi bir ifade de yakalanabilecek ve yakalama ifadesinde kullan\u0131lan de\u011fi\u015fkenin daha \u00f6nce tan\u0131mlanmas\u0131na ihtiya\u00e7 kalmayacak. \u00d6rne\u011fin a\u015fa\u011f\u0131daki ifade C++ 14 \u00f6ncesinde uyar\u0131 ya da hata verecektir, \u00e7\u00fcnk\u00fc bir \u00fcst kapsamda value tan\u0131ml\u0131 de\u011fil.<\/p>\n<pre class=\"lang:c++ decode:true \">int main() {\r\n    auto lambda = [value = 1.5] { return value; };\r\n    return 0;\r\n}<\/pre>\n<p>Jenerik lambdalar ile yukar\u0131daki kod par\u00e7as\u0131 derlenebilir ve ilgili lambda ifadesi 1.5 d\u00f6ner ve bunun tipi de ilgili ifadeden \u00e7\u0131kar\u0131l\u0131r. Asl\u0131nda arkada yine auto kullan\u0131m\u0131n\u0131 g\u00f6r\u00fcyoruz. Benzer \u015fekilde ta\u015f\u0131ma mekanizmas\u0131 ile de yakalama yap\u0131labilecek. \u00d6rne\u011fin a\u015fa\u011f\u0131daki kod i\u00e7erisinde, nas\u0131l ta\u015f\u0131ma yap\u0131ld\u0131\u011f\u0131 g\u00f6r\u00fclebilir.<\/p>\n<pre class=\"lang:c++ decode:true \">#include &lt;memory&gt;\r\n#include &lt;iostream&gt;\r\n\r\nvoid bar(std::unique_ptr&lt;int&gt; p) {\r\n    std::cout &lt;&lt; \"Deger: \" &lt;&lt; *p &lt;&lt; \"\\n\";\r\n}\r\n\r\nint main() {\r\n    std::unique_ptr&lt;int&gt; p(new int(1234));\r\n    auto f = [ptr = std::move(p)]() mutable {\r\n        bar(std::move(ptr));\r\n    };\r\n\r\n    f();\r\n\r\n    return 0;\r\n}<\/pre>\n<p>Ayr\u0131ca, yakalanan de\u011fi\u015fkenler, farkl\u0131 isimlendirmelerle de kullan\u0131labiliyor. Yine bir \u00f6rnek ile bakal\u0131m:<\/p>\n<pre class=\"lang:default decode:true\">#include &lt;iostream&gt;\r\nusing namespace std;\r\n\r\nint main() {\r\n    int x = 4;\r\n\r\n    \/\/ x'i r ismi ile `pass-by-reference` mekanizmasi ile geciriyoruz\r\n    \/\/ ayrica x olarak da yeniden isimlendiriyoruz\r\n    auto lambda = [&amp;rX = x, x = x + 1]()-&gt;int {\r\n        rX += 2; \/\/ rX = 6\r\n        return x + 2; \/\/ 5 + 2, buradaki x, yeni isimlendirdigimiz\r\n    };\r\n    \/\/ 7, 6 basilir\r\n    cout &lt;&lt; lambda() &lt;&lt; \", \" &lt;&lt; x &lt;&lt; endl;\r\n\r\n    return 0;\r\n}<\/pre>\n<p>Bu konulara ilave bilgilere eri\u015fmek isteyen takip\u00e7ilerim i\u00e7in kaynaklar k\u0131sm\u0131na g\u00fczel bir iki site daha ekliyorum. Ayr\u0131ca, bu kabiliyetlere ili\u015fkin standart \u00f6neri dok\u00fcman\u0131na da <span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/www.open-std.org\/jtc1\/sc22\/wg21\/docs\/papers\/2013\/n3559.pdf\">\u015fu sayfadan<\/a><\/strong><\/span> ula\u015fabilirsiniz.<\/p>\n<p>Bir sonraki yaz\u0131mda g\u00f6r\u00fc\u015fmek dile\u011fiyle kendinize \u00e7ok iyi bak\u0131n.<\/p>\n<h2><strong><span style=\"color: #0000ff;\">Kaynaklar<\/span><\/strong><\/h2>\n<ul>\n<li><strong><a href=\"https:\/\/isocpp.org\/wiki\/faq\/cpp14-language#generic-lambdas\"><span style=\"color: #008000;\">https:\/\/isocpp.org\/wiki\/faq\/cpp14-language#generic-lambdas<\/span><\/a><\/strong><\/li>\n<li><strong><a href=\"https:\/\/artificial-mind.net\/blog\/2020\/09\/12\/recursive-lambdas\"><span style=\"color: #008000;\">https:\/\/artificial-mind.net\/blog\/2020\/09\/12\/recursive-lambdas<\/span><\/a><\/strong><\/li>\n<li><strong><a href=\"https:\/\/www.open-std.org\/jtc1\/sc22\/wg21\/docs\/papers\/2013\/n3559.pdf\"><span style=\"color: #008000;\">https:\/\/www.open-std.org\/jtc1\/sc22\/wg21\/docs\/papers\/2013\/n3559.pdf<\/span><\/a><\/strong><\/li>\n<li><strong><a href=\"https:\/\/www.geeksforgeeks.org\/generalized-lambda-expressions-c14\/\"><span style=\"color: #008000;\">https:\/\/www.geeksforgeeks.org\/generalized-lambda-expressions-c14\/<\/span><\/a><\/strong><\/li>\n<li><a href=\"https:\/\/www.cppstories.com\/2020\/08\/lambda-generic.html\/\"><span style=\"color: #008000;\"><strong>https:\/\/www.cppstories.com\/2020\/08\/lambda-generic.html\/<\/strong><\/span><\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Merhaba yaz\u0131l\u0131mperver dostlar\u0131m, C++ 14 yaz\u0131lar\u0131m\u0131za devam ediyoruz. Bu yaz\u0131mda kalan C++ 14 \u00f6zelliklerinden olan Jenerik Lambda (&#8220;Generik Lambda&#8221;) ve &#8220;lambda capture initializers&#8221; kabiliyetlerine bak\u0131yor olaca\u011f\u0131z. Bu iki kabiliyeti, daha \u00f6nce C++ 11 ile sunulan Lambda kabiliyetleri \u00fczerene yap\u0131lan iyile\u015ftirmeler olarak g\u00f6rebilirsiniz. Bu sebeple e\u011fer daha \u00f6nce incelemediyseniz a\u015fa\u011f\u0131daki yaz\u0131ma g\u00f6z atman\u0131z\u0131 \u015fiddetle tavsiye ediyorum:&#8230; <a class=\"more-link\" href=\"https:\/\/www.yazilimperver.com\/index.php\/2022\/05\/15\/haftalik-c-49-generic-lambda-ve-lambda-capture-initializers\/\">Continue reading <span class=\"meta-nav\">&#8594;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":174,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[10,41],"tags":[46,398,1007,1006,139,1008],"class_list":["post-2561","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-c","category-modern-c","tag-c-11","tag-c-14","tag-generic","tag-generic-lambda","tag-lambda","tag-move-semantics"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v21.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Haftal\u0131k C++ 49 - &quot;Generic Lambda&quot; ve &quot;Lambda Capture Initializers&quot; - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.yazilimperver.com\/index.php\/2022\/05\/15\/haftalik-c-49-generic-lambda-ve-lambda-capture-initializers\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Haftal\u0131k C++ 49 - &quot;Generic Lambda&quot; ve &quot;Lambda Capture Initializers&quot; - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\" \/>\n<meta property=\"og:description\" content=\"Merhaba yaz\u0131l\u0131mperver dostlar\u0131m, C++ 14 yaz\u0131lar\u0131m\u0131za devam ediyoruz. Bu yaz\u0131mda kalan C++ 14 \u00f6zelliklerinden olan Jenerik Lambda (&#8220;Generik Lambda&#8221;) ve &#8220;lambda capture initializers&#8221; kabiliyetlerine bak\u0131yor olaca\u011f\u0131z. Bu iki kabiliyeti, daha \u00f6nce C++ 11 ile sunulan Lambda kabiliyetleri \u00fczerene yap\u0131lan iyile\u015ftirmeler olarak g\u00f6rebilirsiniz. Bu sebeple e\u011fer daha \u00f6nce incelemediyseniz a\u015fa\u011f\u0131daki yaz\u0131ma g\u00f6z atman\u0131z\u0131 \u015fiddetle tavsiye ediyorum:... Continue reading &#8594;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.yazilimperver.com\/index.php\/2022\/05\/15\/haftalik-c-49-generic-lambda-ve-lambda-capture-initializers\/\" \/>\n<meta property=\"og:site_name\" content=\"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2022-05-15T14:07:22+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-05-15T14:12:38+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2017\/12\/FeaturedImage-e1580417052514.png\" \/>\n\t<meta property=\"og:image:width\" content=\"32\" \/>\n\t<meta property=\"og:image:height\" content=\"32\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"yaz\u0131l\u0131mperver\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"yaz\u0131l\u0131mperver\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2022\/05\/15\/haftalik-c-49-generic-lambda-ve-lambda-capture-initializers\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2022\/05\/15\/haftalik-c-49-generic-lambda-ve-lambda-capture-initializers\/\"},\"author\":{\"name\":\"yaz\u0131l\u0131mperver\",\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\"},\"headline\":\"Haftal\u0131k C++ 49 &#8211; &#8220;Generic Lambda&#8221; ve &#8220;Lambda Capture Initializers&#8221;\",\"datePublished\":\"2022-05-15T14:07:22+00:00\",\"dateModified\":\"2022-05-15T14:12:38+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2022\/05\/15\/haftalik-c-49-generic-lambda-ve-lambda-capture-initializers\/\"},\"wordCount\":832,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\"},\"keywords\":[\"C++ 11\",\"C++ 14\",\"generic\",\"generic lambda\",\"lambda\",\"move semantics\"],\"articleSection\":[\"C++\",\"Modern C++\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.yazilimperver.com\/index.php\/2022\/05\/15\/haftalik-c-49-generic-lambda-ve-lambda-capture-initializers\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2022\/05\/15\/haftalik-c-49-generic-lambda-ve-lambda-capture-initializers\/\",\"url\":\"https:\/\/www.yazilimperver.com\/index.php\/2022\/05\/15\/haftalik-c-49-generic-lambda-ve-lambda-capture-initializers\/\",\"name\":\"Haftal\u0131k C++ 49 - \\\"Generic Lambda\\\" ve \\\"Lambda Capture Initializers\\\" - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#website\"},\"datePublished\":\"2022-05-15T14:07:22+00:00\",\"dateModified\":\"2022-05-15T14:12:38+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2022\/05\/15\/haftalik-c-49-generic-lambda-ve-lambda-capture-initializers\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.yazilimperver.com\/index.php\/2022\/05\/15\/haftalik-c-49-generic-lambda-ve-lambda-capture-initializers\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2022\/05\/15\/haftalik-c-49-generic-lambda-ve-lambda-capture-initializers\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Ana sayfa\",\"item\":\"https:\/\/www.yazilimperver.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Haftal\u0131k C++ 49 &#8211; &#8220;Generic Lambda&#8221; ve &#8220;Lambda Capture Initializers&#8221;\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.yazilimperver.com\/#website\",\"url\":\"https:\/\/www.yazilimperver.com\/\",\"name\":\"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\",\"description\":\"Payla\u015fmak g\u00fczeldir.\",\"publisher\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.yazilimperver.com\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\",\"name\":\"yaz\u0131l\u0131mperver\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png\",\"contentUrl\":\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png\",\"caption\":\"yaz\u0131l\u0131mperver\"},\"logo\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Haftal\u0131k C++ 49 - \"Generic Lambda\" ve \"Lambda Capture Initializers\" - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.yazilimperver.com\/index.php\/2022\/05\/15\/haftalik-c-49-generic-lambda-ve-lambda-capture-initializers\/","og_locale":"tr_TR","og_type":"article","og_title":"Haftal\u0131k C++ 49 - \"Generic Lambda\" ve \"Lambda Capture Initializers\" - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","og_description":"Merhaba yaz\u0131l\u0131mperver dostlar\u0131m, C++ 14 yaz\u0131lar\u0131m\u0131za devam ediyoruz. Bu yaz\u0131mda kalan C++ 14 \u00f6zelliklerinden olan Jenerik Lambda (&#8220;Generik Lambda&#8221;) ve &#8220;lambda capture initializers&#8221; kabiliyetlerine bak\u0131yor olaca\u011f\u0131z. Bu iki kabiliyeti, daha \u00f6nce C++ 11 ile sunulan Lambda kabiliyetleri \u00fczerene yap\u0131lan iyile\u015ftirmeler olarak g\u00f6rebilirsiniz. Bu sebeple e\u011fer daha \u00f6nce incelemediyseniz a\u015fa\u011f\u0131daki yaz\u0131ma g\u00f6z atman\u0131z\u0131 \u015fiddetle tavsiye ediyorum:... Continue reading &#8594;","og_url":"https:\/\/www.yazilimperver.com\/index.php\/2022\/05\/15\/haftalik-c-49-generic-lambda-ve-lambda-capture-initializers\/","og_site_name":"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","article_published_time":"2022-05-15T14:07:22+00:00","article_modified_time":"2022-05-15T14:12:38+00:00","og_image":[{"width":32,"height":32,"url":"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2017\/12\/FeaturedImage-e1580417052514.png","type":"image\/png"}],"author":"yaz\u0131l\u0131mperver","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"yaz\u0131l\u0131mperver","Tahmini okuma s\u00fcresi":"6 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.yazilimperver.com\/index.php\/2022\/05\/15\/haftalik-c-49-generic-lambda-ve-lambda-capture-initializers\/#article","isPartOf":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2022\/05\/15\/haftalik-c-49-generic-lambda-ve-lambda-capture-initializers\/"},"author":{"name":"yaz\u0131l\u0131mperver","@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb"},"headline":"Haftal\u0131k C++ 49 &#8211; &#8220;Generic Lambda&#8221; ve &#8220;Lambda Capture Initializers&#8221;","datePublished":"2022-05-15T14:07:22+00:00","dateModified":"2022-05-15T14:12:38+00:00","mainEntityOfPage":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2022\/05\/15\/haftalik-c-49-generic-lambda-ve-lambda-capture-initializers\/"},"wordCount":832,"commentCount":0,"publisher":{"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb"},"keywords":["C++ 11","C++ 14","generic","generic lambda","lambda","move semantics"],"articleSection":["C++","Modern C++"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.yazilimperver.com\/index.php\/2022\/05\/15\/haftalik-c-49-generic-lambda-ve-lambda-capture-initializers\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.yazilimperver.com\/index.php\/2022\/05\/15\/haftalik-c-49-generic-lambda-ve-lambda-capture-initializers\/","url":"https:\/\/www.yazilimperver.com\/index.php\/2022\/05\/15\/haftalik-c-49-generic-lambda-ve-lambda-capture-initializers\/","name":"Haftal\u0131k C++ 49 - \"Generic Lambda\" ve \"Lambda Capture Initializers\" - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/www.yazilimperver.com\/#website"},"datePublished":"2022-05-15T14:07:22+00:00","dateModified":"2022-05-15T14:12:38+00:00","breadcrumb":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2022\/05\/15\/haftalik-c-49-generic-lambda-ve-lambda-capture-initializers\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.yazilimperver.com\/index.php\/2022\/05\/15\/haftalik-c-49-generic-lambda-ve-lambda-capture-initializers\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.yazilimperver.com\/index.php\/2022\/05\/15\/haftalik-c-49-generic-lambda-ve-lambda-capture-initializers\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Ana sayfa","item":"https:\/\/www.yazilimperver.com\/"},{"@type":"ListItem","position":2,"name":"Haftal\u0131k C++ 49 &#8211; &#8220;Generic Lambda&#8221; ve &#8220;Lambda Capture Initializers&#8221;"}]},{"@type":"WebSite","@id":"https:\/\/www.yazilimperver.com\/#website","url":"https:\/\/www.yazilimperver.com\/","name":"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","description":"Payla\u015fmak g\u00fczeldir.","publisher":{"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.yazilimperver.com\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb","name":"yaz\u0131l\u0131mperver","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/","url":"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png","contentUrl":"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png","caption":"yaz\u0131l\u0131mperver"},"logo":{"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/2561","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/comments?post=2561"}],"version-history":[{"count":12,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/2561\/revisions"}],"predecessor-version":[{"id":2575,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/2561\/revisions\/2575"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/media\/174"}],"wp:attachment":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/media?parent=2561"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/categories?post=2561"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/tags?post=2561"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}