Frage zu eigenr Messagequeueclass



  • dann kannst du methodenzeiger eh vergessen(ich wollte dich schon im ersten post fragen, ob du dran gedacht hast^^)



  • Ich kenn mich mit Funktionspointer leider nicht so aus, wie muss die list heißen?
    Ich habe (und glaube, dass es falsch ist):
    std::list< void* >

    Und wie müsste die List heißen, wenns um Memberfunktionen geht (muss mir das mit Member oder normaler Funktion nochmal überlegen).

    thx im Voraus
    Glamdring



  • std::list<void (*) ()> mylist; //statische Funktion;
    std::list<void (T::*) ()> mylist; //Member-Funktion
    


  • Danke, aber ich hab noch ne Frage, habs versucht, aber nicht geschafft. Ich biete die Funktion push an:

    void queuepush(void (ptr)()){Messagequeue.push(ptr);}
    

    thx im Voraus



  • hier ein beispiel(ganz schnell zusammengeschrieben):

    template<class Type,class Return>
    class functor{
        private:
            typedef Return (Type::*function)();
            function x;
            Type* object
        public:
            functor(Type* Object,function X):object(Object),x(X){}
            Return operator()(){
                 return object->x();
            }    
    };
    template<class Type,class Return>
    list<functor<Type,Return> > a;
    

    das ganze nent man functor, infos dazu unter mem_fun zb oder unter function-pointer.org

    //edit wenn du nur void functions erwartest kannst du sogar dein object über ein Interface ansprechen, und damit auf alle Klassen und funktionen anwenden:

    class baseFunctor{
        public:
            virtual void operator()()=0;
    };
    template<class Type>
    class functor:public baseFunctor{
        private:
            typedef void (Type::*function)();
            function pointer;
            Type* object;
        public:
            functor(Type* Object,function Funktion):object(Object),pointer(Funktion){} 
            void operator()(){
                 object->pointer
            }
    };
    


  • Glamdrink schrieb:

    Danke, aber ich hab noch ne Frage, habs versucht, aber nicht geschafft. Ich biete die Funktion push an:

    void queuepush(void (ptr)()){Messagequeue.push(ptr);}
    

    Was ist jetzt deine Frage?



  • Glamdrink schrieb:

    Und wie müsste die List heißen, wenns um Memberfunktionen geht (muss mir das mit Member oder normaler Funktion nochmal überlegen).

    Wie wäre es mit std::list<boost::function<void ()> >? Da passt dann jeder Funktor rein, den man über "()" aufrufen kann. Funktionszeiger also direkt und Elementfunktionen, wenn man etwas an sie gebunden hat (std::mem_fun oder gleich boost::bind). Siehe http://www.boost.org/.



  • @otze: Funktoren sind mir eigentlich zu übertrieben, brauch se nicht, wenn diese Funktion geht ist meine Klasse komplett.

    @Shlo: Mein Compiler sieht as als Falsch, mit der Meldung:

    'void (' unerwartet<<

    @operator void: Gute Idee, das werde ich machen.

    thx



  • void queuepush(void (*ptr)()){Messagequeue.push(ptr);}
    


  • Danke @ all, jetzt geht alles


Anmelden zum Antworten