{"id":2405,"date":"2015-07-26T09:13:26","date_gmt":"2015-07-26T08:13:26","guid":{"rendered":"http:\/\/roboblog.fatal-fury.de\/?p=2405"},"modified":"2015-07-26T19:26:37","modified_gmt":"2015-07-26T18:26:37","slug":"replace-runtime-constant-wich-template-variables","status":"publish","type":"post","link":"http:\/\/roboblog.fatal-fury.de\/?p=2405","title":{"rendered":"Replace runtime constant wich template variables"},"content":{"rendered":"<pre><code>\r\nvoid version1(int i, int h) {\r\n  \/\/ if(h) is evaluated every call\r\n  if(h==0) {\r\n  }\r\n  else if(h==1) {\r\n  }\r\n  else {\r\n  }\r\n}\r\n\r\ntemplate<int h>\r\nvoid version2(int i) {\r\n  \/\/ if(h) is evaluated at compile time\r\n  if(h==0) {\r\n  }\r\n  else if(h==1) {\r\n  }\r\n  else {\r\n  }\r\n}\r\n\r\nvoid func(int h) {\r\n  \/\/ h is a runtime constant for this function\r\n  for(int i=0; i < 1e7; ++i) {\r\n    version1(i, h);\r\n  }\r\n\r\n  \/\/ here,h is evaluated at runtime but outside the loop.\r\n  \/\/ the compiler create three different version of version2 each for every h\r\n  if(h==0) {\r\n    for(int i=0; i < 1e7; ++i) {\r\n      version2<0>(i);\r\n    }\r\n  }\r\n  else if(h==1) {\r\n    for(int i=0; i < 1e7; ++i) {\r\n      version2<1>(i);\r\n    }\r\n  }\r\n  else {\r\n    for(int i=0; i < 1e7; ++i) {\r\n      version2<2>(i);\r\n    }\r\n  }\r\n}\r\n\r\nint main() {\r\n  int h=0;\r\n  func(h);\r\n\r\n  h=1;\r\n  func(h);\r\n}\r\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>void version1(int i, int h) { \/\/ if(h) is evaluated every call if(h==0) { } else if(h==1) { } else { } } template void version2(int i) { \/\/ if(h) is evaluated at compile time if(h==0) { } else if(h==1) { } else { } } void func(int h) { \/\/ h is a runtime [&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-2405","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\/2405","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=2405"}],"version-history":[{"count":1,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/2405\/revisions"}],"predecessor-version":[{"id":2406,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/2405\/revisions\/2406"}],"wp:attachment":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2405"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2405"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2405"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}