dumme idee mit templates...
-
ja wie der name so sagt.. sitz ich grad da, plötzlich fällt mir was total freakiges ein... rein vom syntax her ist es möglich eine classe mit templates zu basteln die mit einem funktionsaufruf eine template parameter zähl variable auf einen bestimmten wert setzt und dann ne funktion aufruft... lässt sich bei mir mit dev-cpp allerdings nur mit einer obergrenze compilieren. Ich weiß ned wie genau er das jetzt übersetzt, allerdings geh ich mal davon aus das es nicht sehr sinnvoll ist... war auch nicht so gedacht

Hier der code:#include <cstdlib> #include <iostream> using namespace std; template<long i> class super_rek { public: void add(const int number) { super_rek<i+1>().check(number+i); } void check(const int number) { if(i+1<number) super_rek<i+1>().check(number); else super_rek<i+1>().loop(); } void loop(void) { cout<<i<<" "; super_rek<i-1>().loop(); } }; template<> void super_rek<400>::check(const int number) { cout<<"abort!\n"; } template<> void super_rek<0>::loop(void) { cout<<"0\n"; } int main(int argc, char *argv[]) { int num; cin>>num; super_rek<30>().add(num); system("PAUSE"); return EXIT_SUCCESS; }das hat jetzt eigentlich ned wirklich einen sinn... aber ich wollt euch das nicht vorenthalten

jaja ich weiß, die meisten kennen sowas sicher schon..mfg Manuelh87
-
Super Beitrag zum Thema "Reducing Algorithms to O(1) with Templates"
-
LordJaxom schrieb:
Super Beitrag zum Thema "Reducing Algorithms to O(1) with Templates"

na vielleicht post ich auch mal was sinnvolles, mal sehn...
interessieren würd mich, wie er den rekursiven aufruf von loop() übersetzt hat...
hab aber auch was sinnvolles... naja, mehr oder weniger. matrix + vector template-classen wo alle for loop durch rekursion, also mit templates, umgesetzt sind! Habs schon getestet, also zumindest ein eindimensionaler loop wird schneller als for. aber glaub auch die 2-dimensionalen waren schneller als eine schleife.
Hab auch beim kopieren von den vektoren und der matrix diese technik benutz... muss aber noch testen ob ein memcopy nicht viel schneller wäre oder nicht. Das muss glaub ich getestet werden. Bei der vetor klasse glaub ich ziemlich sicher, dass die rekurisv-template methode die besseren ergebnisse erzielt (sind ja nur 3 zuweisungen...)
-> also keine angst... ich missbrauche die templates nicht nur um beim compiler an die grenzen zu stoßen.
mfg Manuel
-
Dem Compiler ist nicht klar wie gross nummer werden kann.
Der sieht nur, dass wenn er bestimmte Pfade geht eine Instanz von blah<i+1> oder blah<i-1> anlegen muss und so rennt er los und instanziert.
Dabei trifft er wieder auf neu anzulegende Instanzen...
.loop...lo0p...l0op.
Wenn du keine Abbruchbedingung setzt ist halt schnell die Rekursionstiefe erreicht.