2 fragen:
-
hab beim rumstöbern folgenden code enteckt:
class CTest { public: explicit CTest(int nSize=0) : m_nSize(nSize), m_pData(new int[nSize]) { } }für was ist den das explicit gut ?
-
für was ist den das explicit gut ?[/quote]
macht automatische konvertierung von int nach CTest aus.stell dir vor, du hast ne funktion print(CTest const&) und macht mal print(5); wolltest bestimmt nicht nen CTest(5) ausgeben.
und wo ist die zweite frage?
-
danke !
-
und wo ist die zweite frage?
-
hab in einem STL Buch folgenden code enteckt.....
template<class T> class EltFkt : public unary_function<T,void> { public: explicit ElftFkt(void (T::*z() const) : ef(z) { } private: void (T::* const ef)() const; }alter schwede, als ich das zum ersten mal gelesen habe, haben sich meine gehirnwindungen ordentlich geboben

ich check dabei folgendes nicht:
void (T::* const ef)() const; // was ist das ??und was ist das für ein komischer parameter ?
ElftFkt(void (T::*z() const)
-
maroni schrieb:
explicit ElftFkt(void (T::*z() const) : ef(z)
{
}void (T::*z)() ist ein zeiger auf eine methode.
im unterschied zu zeigern auf normale globale funktionen oder static-methoden, die einfach die adresse sind, wo der prozessor hinspringen soll, müssen methodenzeiger anders sein. weil es ja auch virtuelle funktionen gibt. sizeof(Methodenzeiger)==x*sizeof(void*) mit x==2 oder x==3.
und die komische syntax ist, um leute abzuschrecken.void (T::* const ef)() const;
der zeiger selbst. mit viel const gewürzt.
-
das beispiel ist vor allen dingen wegen den schlechten bezeichnern schlecht zu verstehen.

-
Das muss so sein, schau doch mal in die boost/stl-files.
Wer ironie findet darf sie behalten
