Das sieht hervorragend aus!
Für alle, die auch da neben mir noch durchsteigen wollen, habe ich mal die Ableitungskette / -baum / -graphen aufgeschrieben. Für
fma1:
Code: Alles auswählen
fusedmultiplyadder<adder1<2, 3>, 4>
: public inherit_base_pattern<adder1<2, 3>, fusedmultiplyadder<adder<2, 3>, 4>>
: public virtual fusedmultiplyadder<adder<2, 3>, 4>
Damit matcht
fusedmultiplyadder<adder1<2, 3>, 4> auf
fusedmultiplyadder<adder<2, 3>, 4>. Und für
fma4:
Code: Alles auswählen
fusedmultiplyadder1<adder2<2, 3>, 4>
: public virtual fusedmultiplyadder<adder2<2, 3>, 4>
: public inherit_base_pattern<adder2<2, 3>, fusedmultiplyadder<adder<2, 3>, 4>>
: public virtual fusedmultiplyadder<adder<2, 3>, 4>,
public inherit_base_pattern<adder2<2, 3>, fusedmultiplyadder1<adder<2, 3>, 4>>
: public virtual fusedmultiplyadder1<adder<2, 3>, 4>
Damit matcht
fusedmultiplyadder1<adder2<2, 3>, 4> auf
fusedmultiplyadder1<adder<2, 3>, 4> und auf
fusedmultiplyadder<adder<2, 3>, 4>.
CodingCat hat geschrieben:Mich würde ja echt interessieren, was du damit eigentlich baust. ;)
Es hat nichts mit Mathematik zu tun, sondern es sind ein paar Hilfsklassen, die enum traits implementieren; als dass man über enums dann iterieren kann, und der Iterator verschiedene Policies besitzt, mit denen man entweder das enum von Anfang bis Ende einmal durchläuft; oder der Iterator am Ende umwrappt, und man den enum immer wieder in einer Schleife durchläuft. Hintergrund ist, dass ich keine Lust mehr hatte, immer auf so etwas wie
if(myEnum == lastEnumElement) myEnum = firstEnumElement; else myEnum++; zu testen; nun muss ich nur
myEnumIterator++; aufrufen. Wenn ich das auf obiges
inherit_base_pattern umgestellt habe, dabei nicht auf die Nase geflogen bin, und das alles auch im g++ kompiliert (oh Gott mache ich dumme Fehler; aber Visual Studio sagt halt nichts) werfe ich das in die Public Domain, natürlich hier veröffentlicht. Und dann sagt ihr mir, warum das alles Scheiße war. :)