template funktion als thread aufrufen (boost::thread)
-
Hallo,
ich wieder einmal eine Frage zum Thema boost::thread. Ich rufe eine Pythonmethode von einer C++-Klasse aus auf und würde diesen Aufruf gerne als Thread laufen lassen. Normal würde ich es wie folgt machen.boost::thread thrd(boost::bind(&call_method<void>, this->self, "performEvent", str("jo !!!!")));Leider sagt mir der Compiler, dass er den Rückgabewert der Funktion call_method nicht kennt.
error: no matching function for call to `bind(<unknown type>, PyObject*&, const char[13], boost::python::str)'Kann mir jemand weiter helfen? danke schon mal im voraus.
gruß
tyr377
-
wie ist denn call_method definiert?
-
ja, in boost::python. Der Aufruf an sich funktioniert aus und sieht wie folgt aus.
call_method<void>(this->self, "performEvent", str("jo !!!!"));
-
oh, ich habe wohl schon Tomaten auf den Augen.
Aber ich denke du kannst die Info entnehmen. call_method ist ne boost::python-funktion.
gruß
tyr377
-
Ja, dann kann der Compiler das auch nicht.
Da hilft i.A. casten. Etwa so wasboost::bind( (void (*)( PyObject*, const char*, boost::python::str ))&call_method<void>, this->self, "performEvent", str("jo !!!!"))ich unterstelle mal, der Returntyp ist void; bitte prüfe noch mal die anderen Parameter. Aber dann sollte es gehen.
Gruß
Werner
-
Rückgabewert ist void, das hast du völlig recht. Aber leider macht der g++ es immer noch nicht.
error: no matches converting function `call_method' to type `void (*)(struct PyObject*, const char*, class boost::python::str)'
-
Dann gib mal alle Template-Parameter an. Also
boost::bind( (void (*)( PyObject*, const char*, const boost::python::str& ))&call_method<void, boost::phthon::str > , this->self, "performEvent", str("jo !!!!")) // in der Hilfe steht: template <class R, class A1, class A2, ... class An> R call_method(PyObject* self, char const* method, A1 const&, A2 const&, ... An const&).. eigentlich solltest Du den cast dann auch weglassen können
.
Das Problem ist hier, dass man nicht genau weiß wie dieses method_call<> definiert ist.Gruß
Werner
-
Tja, selbe Antwort vom g++ wie vorher auch. Habe dann auch mal den cast weg genommen und dann sagt er wieder 'unknown type'.
Einfach kann halt jeder. 
-
Als völlig unwissender (sowohl was Python als auch boost::python angeht) in den Raum geworfen:
Evtl. &boost::python::call_method?
-
LordJaxom schrieb:
Als völlig unwissender (sowohl was Python als auch boost::python angeht) in den Raum geworfen:
Evtl. &boost::python::call_method?Das war auch eine meiner ersten Vermutungen aber leider nein. Es macht keinen Unterschied.