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 😉


Anmelden zum Antworten