Jo, ten rekurzivní systém funguje taky, ale mrzelo mě, že některé překladače (clang) nepochopil, že jde o výběr alternativy, a překládal to tupě i na -O3. Pro 64 variant to tedy vypadalo takto (rozbalení rekurze)
if (x == 1) return fn<1>();
if (x == 2) return fn<2>();
if (x == 3) return fn<3>();
if (x == 4) return fn<4>();
if (x == 5) return fn<5>();
...
Proto jsem zkusil variantu přes jump-table.
GCC v některých situacích byl schopen pochopit, že jde o výběr variant a tu jump table tam udělal. Ale jen v některých situacích
Intenzivně se zabývám programováním zejména v jazyce C++. Vyvíjím vlastní knihovny, vzory, techniky, používám šablony, to vše proto, aby se mi usnadnil život při návrhu aplikací. Pracoval jsem jako programátor ve společnosti Seznam.cz. Nyní jsem se usadil v jednom startupu, kde vyvíjím serverové komponenty a informační systémy v C++
Přečteno 50 890×
Přečteno 23 805×
Přečteno 22 794×
Přečteno 20 804×
Přečteno 17 676×