boost::python und PyObject* als Rückgabewert

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
tyr377
User
Beiträge: 4
Registriert: Montag 16. April 2007, 11:08

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
tyr377
User
Beiträge: 4
Registriert: Montag 16. April 2007, 11:08

Okay, mal die Frage anders gestellt: Wie kann ich ein PyObject* aus einer C++-Klasse an Python übergeben?

Gruß,
tyr377
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

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
tyr377
User
Beiträge: 4
Registriert: Montag 16. April 2007, 11:08

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.
Antworten