010
24.05.2006, 13:57 Uhr
RHBaum
|
Nehmen wir mal an, du baust deine Matrix mit per template definierter groesse
C++: |
template<class T,size_t MSIZE> class Matrix { // was weiss ich ... };
|
dann musst doch irgend ein scherzbold im code die dinger noch "verwenden", quasi anlegen ... also:
C++: |
Matrix<double,2> m2; Matrix<double,3> m3; Matrix<double,4> m4; Matrix<double,5> m5;
|
vergleichbar ist das nur noch mit statischen arrays
du bokommst dafuer natuerlich auch die volle performance eines statischen arrays.
du hasst also voellig unter controlle, wieviele template auspraegungen compiliert werden. in dem moment, wo das dynamsich gebraucht wird, also irgendwie anhand der usereingaben oder ner datei als input in frage kommt, bist mit dem design eh erschossen !
Also weichst du auf dynamsiche groessen eh aus, und verwendest:
C++: |
double * mx = new double[x*y];
|
oder noch besser:
C++: |
std::vector<double> m_matrix; // in ner schoenen klasse verpackt !
|
Also, in dem moment, wo du irgendwie anfaengst zigtausend auspraegungen von nem template bewust zu generieren, iss am design eh was faul ^^ Templates sind wie du selbst sagst, nich das allheilmittel. Aber vernuenftig angewand sind sie goldwert ^^ Und ja, im endeffekt kann man sie alle umgehen, aber das kann unter umstaenden rechenzeit kosten.
Und da kommt auch das wesen der templates ins spiel: negativ: - sie sind komplizierter im Aufbau, damit schwer zu verstehen -> nicht immer waretungsfreundlich - sie sparen definitv kein code auf compilerebene, sondern nur vorm praeprozessor, also die exe wird meist groesser
positiv: - koennen generische sachen bauen ohne ne typsicherheit zu verlieren. - wiederverwendung ohne vererbung, damit kann der compiler selber viel besser optimieren - ich kann total unterschiedliches verhalten implementieren, ohne ne laufzeitverzweigung zu verwenden, sondern das verhalten durch das typematching des compilers waehrend des compilierens bestimmen -> keinerlei performanceverlust.
Und damit kommt man zu dem schluss:
Iss dir die laufzeitperformance egal, brauchst du dich mit templates gar ned so sehr rumschlagen. wiederverwendung von code is ja nur ein aspekt und kann durch andere sachen auch erreicht werden. Aber sobald performance ins spiel kommt, sind templates einfach unschlagbar ....
zu 90% bau ich templates, weil ich von haus aus performant wie moglich bleiben will ...
Ciao ...
Bearbeitung: |
codetags nutzen, sollteste doch langsam wissen!
|
Dieser Post wurde am 24.05.2006 um 15:32 Uhr von FloSoft editiert. |