Я новичок в ускорении Python. Мне нужно сначала инициализировать экземпляр класса cpp в коде cpp, а затем передать этот экземпляр cpp коду python, использовать экземпляр класса python для его вызова (экземпляр cpp). Я пробовал использовать API Python / C, но не смог, поэтому мне интересно, как передать экземпляр класса C ++ в класс python.
Ниже приведен мой код, измененный по сравнению с демонстрацией boost python.
в main.cpp
#include <python2.6/Python.h>
#include <boost/python.hpp>
#include <iostream>
using namespace boost::python;
using namespace std;
class World
{
private:
string name;
public:
void set(string name)
{
this->name = name;
}
void greet()
{
cout << "hello, I am " << name << endl;
}
};
typedef boost::shared_ptr< World > world_ptr;
BOOST_PYTHON_MODULE(hello)
{
class_<World>("World")
.def("greet", &World::greet)
.def("set", &World::set)
;
register_ptr_to_python<world_ptr>();
};
int main()
{
Py_Initialize();
PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.path.append('./')");
world_ptr worldObjectPtr (new World);
worldObjectPtr->set("C++!");
try
{
inithello();
PyObject* pModule =PyImport_ImportModule("python");
PyObject* pDict = PyModule_GetDict(pModule);
PyObject* pClassHelloPython = PyDict_GetItemString(pDict, "Person");
PyObject* pInstanceHelloPython = PyInstance_New(pClassHelloPython, NULL, NULL);
PyObject_CallMethod(pInstanceHelloPython, "sayHi", NULL);
worldObjectPtr->greet();
PyObject_CallMethod(pInstanceHelloPython, "greetReset", "O", worldObjectPtr);
worldObjectPtr->greet();
}
catch (error_already_set)
{
PyErr_Print();
}
Py_Finalize();
return 0;
}
в python.py
class Person:
def sayHi(self):
print 'hello from python'
def greetReset(self, instance):
instance.set('Python')
В приведенном выше коде Я хочу передать worldObjectPtr в pInstanceHelloPython, таким образом, pInstanceHelloPython может установить имя worldObjectPtr-> для Python. Но я просто не знаю, как это сделать. Заранее благодарим вас за терпение !!