Bonjour à tous,
Comme je ne sais pas ou poster je l'ai mis ici
J'essaie de passer une instance d'une classe C++ vers un script Python
J'ai définie la classe en python en utilisant Boost.
J'arrive à récupérer un ojbet de python, mais je n'arrive pas à envoyer un objet (instance) dans un script
Code :
- #include <iostream>
- #include <fstream>
- #include <string>
- using namespace std;
- #include <boost/python.hpp>
- #include <graminit.h>
- using namespace boost::python;
- // Classe "Base" C++
- class Base
- {
- public:
- Base(int iPoids = 0) {_Poids = iPoids;};
- ~Base() {};
- int GetPoids() {return _Poids;};
- void SetPoids(int iPoids) {_Poids = iPoids;};
- private:
- int _Poids;
- };
- // Classe "Base" Python
- BOOST_PYTHON_MODULE(DIP)
- {
- class_<Base>("Base", init<int>())
- .def("GetPoids", &Base::GetPoids)
- .def("SetPoids", &Base::SetPoids)
- ;
- }
- string *readPythonScript( string fileName ); // fonction implémentée et qui marche, non explicité ici
- //-----------------------------------------------------------------------------
- // Name: main()
- // Desc: Application's main entry point.
- //-----------------------------------------------------------------------------
- void main( void )
- {
- Base Agent; // j'aimerais passer Agent dans le script
- if( PyImport_AppendInittab( "DIP", initDIP ) == -1 )
- throw runtime_error( "Failed to add \"DIP\" to the "
- "interpreter's built-in modules" );
- // Setup Python to be embedded...
- Py_Initialize();
- object main_module(( handle<>(borrowed(PyImport_AddModule("__main__" )))));
- object main_namespace = main_module.attr("__dict__" );
- string *pythonScript = readPythonScript( "test.py" );
- if( pythonScript != NULL )
- {
- PyRun_String( pythonScript->c_str(), Py_file_input,
- main_namespace.ptr(), main_namespace.ptr() );
- }
- delete pythonScript;
- Agent = extract<Base&>(main_namespace["Agent"]); //Récup de l'instance agent du script dans l'objet C++
- cout << "Agent: " << Agent.GetPoids() << endl;
- // Cleanup after Python...
- Py_Finalize();
- system("pause" );
- }
|
et le script
Code :
- from DIP import *
- //Agent = Base(10) il faudrait récupérer l'instance Agent du c++
- Agent.SetPoids(15)
|
Quelqu'un connaitrait-il le contraire de "extract" ? (genre intract ou insert )
Pitié j'ai besoin d'aide
Merci d'avance