我想在python中控制c ++类对象。
我是个例子。
C ++中的对象类,并将对象发送给python。
class Animal animal();
PyObject *py_func = PyObject_GetAttrString(mymodule, "ControlAnimal");
PyObject_CallFunction(func, "class Animal", animal);
Python中的控制对象。
def ControlAnimal(animal) // Get animal object is created object from c++.
pass
如果对象是在python中控制的,则由于动物是python中c ++对象的引用,因此也适用c ++中的animal。
我已经尝试过SWIG并成功将Animal类绑定到python。
python.
>> import animal
>> a = animal.Animal()
但是它只能控制python中创建的类对象。
对不起英语不好。
答案 0 :(得分:0)
我通过使用静态全局变量解决了这个问题。
在头文件中声明静态全局变量共享的python变量。
static Animal* g_animal;
编写函数以设置并获取g_animal。
Animal* SetCppInstance(PyObject* capsule);
Animal* GetCppInstance();
您可以在c ++中将创建的动物对象指针设置为在python中使用。 要在python中设置g_aniaml,请使用PyObject_CallFunction()。
Animal aniaml;
PyObject *py_module_animal = PyImport_ImportModule("animal");
PyObject *py_module_animal_setcppinstance = PyObject_GetAttrString(py_module_animal, "SetCppInstance");
PyObject_CallFunction(py_module_animal_setcppinstance, "O", py_capsule_animal);
并且您必须获取python模块。要获取python动物模块,请使用swig。
然后,您应该编写control.py来控制动物。
import animal
obj = animal.GetCppInstance()
...
当然,您应该在c ++中手动调用control.py。
PyImport_ImportModule("control");
现在,如果您在control.py中控制obj,则c ++中的动物也会更改。