Seite 1 von 1

boost::python und PyObject* als Rückgabewert

Verfasst: Dienstag 17. April 2007, 12:34
von tyr377
Hallo,

wieder einmal habe ich eine kleine frage bezüglich boost.python. Ich schreibe gerade an einem größeren Projekt und kann ein Symbol nicht auflösen. Stark vereinfacht sieht es so aus:

Code: Alles auswählen

class test
{
public : 
   PyObject* func()
  {
       return PyFloat_FromDouble(2.54);
  }
};

BOOST_PYTHON_MODULE_INIT(PyTest)
{
    class_<test>("TestClass")
        .def("func",    &test::func)
    ;
}
Die Methode func soll einfach eine PyObject zurück geben (in diesem Fall PyFloat). Kompiliert habe ich es bekommen, leider will aber python das modul nicht laden, weil er func nicht auflösen kann. Hat jemand ne Idee, wie ich das PyObject in Python nutzen kann?

Gruß,
tyr377

Verfasst: Mittwoch 18. April 2007, 09:59
von tyr377
Okay, mal die Frage anders gestellt: Wie kann ich ein PyObject* aus einer C++-Klasse an Python übergeben?

Gruß,
tyr377

Verfasst: Mittwoch 18. April 2007, 11:03
von CM
Hoi,

Bisher hatte boost hier keinen so guten Stand, weil es als zu kompliziert und mit rel. übler Doku versehen galt. Vielleicht hat sich das geändert, jedenfalls schien mir die boost Seite mit wesentlich mehr Doku versehen, als noch vor zwei Jahren. Zeit also mal wieder drauf zu schauen ...

Was Dein Problem anlangt, wenn Dir hier keiner helfen kann: boost-Python bietet keine Mailingliste an, aber verweist auf die C++-SIG: http://www.python.org/community/sigs/current/c++-sig/
Da wirst Du wohl eher eine Antwort erhalten.

Viel Erfolg.

Vielleicht magst Du dann die Antwort hier posten?

Gruß,
Christian

Verfasst: Mittwoch 18. April 2007, 11:43
von tyr377
Schön das mir mal jemand antwortet. ;) Ich habe ein Beispiel gefunden, bei dem von einer Funktion ein PyObjekt zurück gegeben wird. na ja, leider wird hier sowohl Boost.Python als auch die Standard-Pythondefinition benutzt. Find ich persönlich nicht so ganz sauber, aber im notfall muss ich wohl darauf zurück greifen.

gruß
tyr377

PS: natürlich poste ich gern meine Lösung.