kleine Funktion geschrieben (sehr kleine)
-
otze schrieb:
CarstenJ schrieb:
Hallo,
otze schrieb:
template<class T,int i> int countem(T (&pArr)[i]) { return i; }
das ding kann ein array jedes typs zählen.
den Code verstehe ich nicht. Wo wird da was gezählt? Kannst du das bitte mal erklären?
natürlich hast du recht, es wird nicht gezählt, sodnern eher die größe abgefragt, aber es läuft aufs selbe hinaus.
Wow, ist ja echt genial. Muss mich wohl auch mal damit auseinandersetzen. In welchem Buch wird dann sowas ausführlich erklärt?
-
ich hab mit modern c++ design begonnen, dann ein bischen in boost gesucht,einen abstecher in die expression templates gemacht,und vorallem viel selbst ausprobiert.
-
CarstenJ schrieb:
Wow, ist ja echt genial. Muss mich wohl auch mal damit auseinandersetzen. In welchem Buch wird dann sowas ausführlich erklärt?
Eigentlich reicht es manchmal, die Forensuche hier zu benutzen.
Ich kann mich erinnern, dass das schon mal jemand gepostet hat. Weiss leider nicht mehr, wer das war.
-
Naja, mich hats trotzdem umgehauen.
-
das finde ich aber besser
template <typename type, unsigned int num> inline const unsigned int countem (type (&)[num]) { return (num); }
-
@de maestro
goil
-
jo, const ist klasse, vorallem da der rückgabewert eh nicht verändert werden kann
und das tolle inline hilft dem compiler sicher noch bei der optimierung, sonst würde er das ja auch nie schaffen
-
jo, aber der unnamed parameter ist viel 1337ter als Deins.
-
@de maestro
Wenn ich Hume noch richtig in Erinnerung hab, dann hat der mal gesagt, dass const Rückgaben bei builtin Typen keinen Sinn machen, da diese nicht verändert werden können- const macht nur bei UDT's Sinn.@otze
Das inline macht schon Sinn, denn normalerweise wird man so eine Funktion in irgendeine Header schreiben (das leidige Thema mit export ist dir ja bekannt). Und dann musst du die Funktion inline machen, sonst gibts schnell eine ODR Verletzung. Dass ein guter Compiler das auch ohne inline optimieren wird steht sicherlich ausser Frage.
-
template-Funktionen dürfen sowieso pro ÜE einmal definiert werden. Allerdings müssen die Definition identisch sein. Sie sind also im C++-Sinne automatisch inline.
Insofern bringt hier das inline nichts.MfG Jester
-
edit: gelöscht