{"id":2461,"date":"2016-01-21T09:45:23","date_gmt":"2016-01-21T08:45:23","guid":{"rendered":"http:\/\/roboblog.fatal-fury.de\/?p=2461"},"modified":"2016-01-21T11:01:38","modified_gmt":"2016-01-21T10:01:38","slug":"template-loop-mit-rekursion","status":"publish","type":"post","link":"http:\/\/roboblog.fatal-fury.de\/?p=2461","title":{"rendered":"template loop mit rekursion"},"content":{"rendered":"<p>Einfache Schleifen mit Templates funktionieren mittels Rekursionen. Das ist auf<br \/>\ndem ersten Blick etwas ungew\u00f6hnlich, aber letzendlich doch nur eine Schleife.<br \/>\nWir muessen die Anzahl an Iterationen aber zur Compilezeit vorgeben! Entweder<br \/>\nper Template Parameter oder constexpr.<\/p>\n<p>Normal w\u00fcrde man Parameterlisten packen\/unpacken oder was man sonst in einer Schleife macht.<br \/>\nIch m\u00f6chte aber N mal eine Funktion mit einem laufenden Template Parameter i erstellen.<br \/>\nErstens kann ich so meine Funktion f\u00fcr ein festes N specialisieren, zweitens kann man<br \/>\ndie spezielle Funktion zur Laufzeit ausw\u00e4hlen.<\/p>\n<pre><code>\r\n#include &lt;iostream>\r\n#include &lt;array>\r\n\r\ntemplate&lt;int N>\r\nvoid funcToImpl(int n) {\r\n  std::cout << \"template N: \" << N << \" runtime n: \" << n <<std::endl;\r\n  std::array&lt;int, N> fixedLengthArray;\r\n}\r\n\r\ntemplate&lt;int i>\r\nvoid func(int n) {\r\n  if(i == n) {\r\n    funcToImpl<i>(n);\r\n  } else {\r\n    func&lt;i-1>(n);\r\n  }\r\n}\r\n\r\n\/\/ rekursionsanker bei i=0\r\ntemplate&lt;>\r\nvoid func<0>(int n) {\r\n  funcToImpl<0>(n);\r\n}\r\n\r\nint main(int argc) {\r\n  \/\/ rekursion faengt bei i=80 an\r\n  func&lt;80>(argc);\r\n}\r\n<\/code>\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Einfache Schleifen mit Templates funktionieren mittels Rekursionen. Das ist auf dem ersten Blick etwas ungew\u00f6hnlich, aber letzendlich doch nur eine Schleife. Wir muessen die Anzahl an Iterationen aber zur Compilezeit vorgeben! Entweder per Template Parameter oder constexpr. Normal w\u00fcrde man Parameterlisten packen\/unpacken oder was man sonst in einer Schleife macht. Ich m\u00f6chte aber N mal [&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":[],"class_list":["post-2461","post","type-post","status-publish","format-standard","hentry","category-allgemein"],"_links":{"self":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/2461","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=2461"}],"version-history":[{"count":6,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/2461\/revisions"}],"predecessor-version":[{"id":2467,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/2461\/revisions\/2467"}],"wp:attachment":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2461"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2461"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2461"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}