Können funktionen schon beim kompilieren ausgeführt werden?
-
Warum soll ich das lesen, wovon handelt das?
Außerdem ist es doch dämlich funktionen (egal ob iterativ oder rekursiv) einzubauen die dir dann die fakultät berechnen, da kann ich doch eben den windowstaschenrechner nutzen und gut ist?!
Ich seh den sinn net
-
Gast1001 schrieb:
Warum soll ich das lesen, wovon handelt das?
Außerdem ist es doch dämlich funktionen (egal ob iterativ oder rekursiv) einzubauen die dir dann die fakultät berechnen, da kann ich doch eben den windowstaschenrechner nutzen und gut ist?!
Ich seh den sinn net
Es wird schon zur Compilezeit berechnet. Es wird nicht mehr zur Ausführung berechnet. Frag mal HumeSikkins http://bens.c-plusplus.info/
Der kann dir mehr zu TemplateMetaProgramming erzählen.
-
Aber warum?!
Warum um die Ecke gehen, wieso nicht mit dem Rechner ausrechnen und den Wert benutzen, bitte ein konkretes Bsp. wofür man so etwas gebrauchen könnte?! Könnte dann ja evt mal interessant sein
-
Der Rechner berechnet es doch.
-
Hi,
schau mal hier auf c-plusplus.net.
Marc++us hatte glaub ich mal eine PDF zum Thema Template Metaprogrammierung veröffentlicht.
ChrisM
-
Gast1001 schrieb:
Aber warum?!
Warum um die Ecke gehen, wieso nicht mit dem Rechner ausrechnen und den Wert benutzen, bitte ein konkretes Bsp. wofür man so etwas gebrauchen könnte?! Könnte dann ja evt mal interessant sein
Fakultaet ist natuerlich Sinnlos. da gebe ich dir recht.
Aber nimm zB mal Expressiontemplates.
Hier wird eine Expression zerlegt und als ganzes Ausgewertet, statt als einzelne Teile mit temporären Ergebnissen.Angenommen x und y sind Arrays und der ausdrueck
2*x
multipliziert alle Elemente von x mit 2 und liefert ein array zurück.
1.2*x + x*y;
wird zB zu folgendem
Add<Mult<Scalar<double>, Array<double> >, Mult<Array<double>, Array<double> > >
Hier gibt es keine temporären ergebnisse die sinnlos kopiert werden müssenIn 'C++ Templates' lernst du eine Menge über Templates und ihren sinnvollen einsatz.
-
-
Shade Of Mine schrieb:
Gast1001 schrieb:
Aber warum?!
Warum um die Ecke gehen, wieso nicht mit dem Rechner ausrechnen und den Wert benutzen, bitte ein konkretes Bsp. wofür man so etwas gebrauchen könnte?! Könnte dann ja evt mal interessant sein
Fakultaet ist natuerlich Sinnlos. da gebe ich dir recht.
Aber sehr einfach zu verstehen.
-
Also ich finde Fac<5> im Code eindeutiger als 120, und schneller als den Taschenrechner zu öffnen und das Ergebnis rüberzukopieren ist es auch - davon abgesehen, dass man ja nicht unbedingt direkt ein Literal an Fac<> übergeben muss. Aber ein nicht-metaprogrammiertes Fac<> wird ein guter Compiler wohl auch ausrechnen, wenn's geht...
-
@operator void
bei solchen trivialen Sachen lohnt sich IMHO die Compile-Zeit verlängerung nicht, die durch Template Meta Programmierung teilweise recht enorm sein kann.Da würde ich lieber einen Kommentar im Quellcode einfügen, der angibt warum die 120 da steht.
-
kingruedi schrieb:
Da würde ich lieber einen Kommentar im Quellcode einfügen, der angibt warum die 120 da steht.
exakt!
sinn macht Fact<> nur dann, wenn es Teil einer Library ist, in der Fact<> abhaengig von den angaben des programmierers berechnet werden muss.
-
man brauch ja noch nichtmal nen Kommentar
const int fakultaet_von_5=120 void foo() { bar(fakultaet_von_5); }
ist ja auch recht eindeutig
-
Ob das Starten des Taschenrechners, Ausrechnen des Werts, hinzufügen der Konstante und die tatsächliche Verwendung von dem kleinen Kompilierungsboost mal ausgeglichen werden, hängt dann wohl davon ab, wie oft man seinen Code kompiliert...
-
kingruedi schrieb:
man brauch ja noch nichtmal nen Kommentar
const int fakultaet_von_5=120 void foo() { bar(fakultaet_von_5); }
ist ja auch recht eindeutig
Der war gut.
-
Hallo liebe Experten des Template Meta Programmierung,
wer von euch hat schonmal ein Meta IF für den Windows C++ Compiler (VC++7) geschrieben?
Der Compiler von Windows ist nicht wirklich standartkonform.
Beispielsweise scheint partielle Spezialisierung nur bedingt möglich.
-
titus78 schrieb:
Hallo liebe Experten des Template Meta Programmierung,
wer von euch hat schonmal ein Meta IF für den Windows C++ Compiler (VC++7) geschrieben?eine standardkonforme variante oder eine non-konforme?
hier die standard konforme:
namespace hidden { template<bool condition> struct IfThenElseImpl { template<class Then, class Else> struct inner { typedef Then result; }; }; template<> struct IfThenElseImpl<false> { template<class Then, class Else> struct inner { typedef Else result; }; }; } template<bool condition, class Then, class Else> struct IfThenElse { typedef hidden::IfThenElseImpl<condition>::inner<Then, Else>::result result; };
-
Ok, danke für die Antworten:
Ich werd mich bei Gelegenheit mal damit beschäftigen, aber ich denke für meine Zwecke ist es wirklich einfacher per Hand zu rechnen.
-
Shade Of Mine schrieb:
titus78 schrieb:
Hallo liebe Experten des Template Meta Programmierung,
wer von euch hat schonmal ein Meta IF für den Windows C++ Compiler (VC++7) geschrieben?eine standardkonforme variante oder eine non-konforme?
hier die standard konforme:
[...] template<bool condition, class Then, class Else> struct IfThenElse { typedef hidden::IfThenElseImpl<condition>::inner<Then, Else>::result result; };
Nicht ganz konform. Fehlt ein typename und ein template. So ist's richtig:
template<bool condition, class Then, class Else> struct IfThenElse { typedef typename hidden::IfThenElseImpl<condition>::template inner<Then, Else>::result result; };
-
stimmt. sorry.
hab das aus dem gedächtnis geschrieben
-
Nicht ganz konform. Fehlt ein typename und ein template. So ist's richtig:
das typename verstehe ich und ist auch logisch, aber wann muss man templates explizit qualifizieren? Wozu? Und welcher Compiler verlangt das? (Meine üblichen Compiler übersetzen sowohl mit, als auch ohne anstandslos).