Frage zu eigenr Messagequeueclass
-
wieso sollte sie 4 Byte erwarten,wenn du die liste für methodenzeiger auslegst?
-
weil die Liste normale Funktionszeiger erwartet.
-
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