我想在 C++ 应用程序中使用嵌入 python 并调用 python 脚本中定义的函数。该函数的参数是一个 C++ 对象。看我的代码:
class Test
{
public:
void f()
{
std::cout<<"sss"<<std::endl;
}
};
int main()
{
Py_Initialize();
boost::python::object main = boost::python::import("__main__");
boost::python::object global(main.attr("__dict__"));
boost::python::object result = boost::python::exec_file("E:\\python2.py", global, global);
boost::python::object foo = global["foo"];
if(!foo.is_none())
{
boost::python::object pyo(boost::shared_ptr<Test>(new Test())); // compile error
foo(pyo);
}
return 0;
}
python2.py:
def foo(o):
o.f()
如何将 C++ 对象传递给 foo?我知道 swig 可以做到这一点,但是 boost::python 呢?
Solved.
class Test
{
public:
void f()
{
std::cout<<"sss"<<std::endl;
}
};
//==========add this============
BOOST_PYTHON_MODULE(hello)
{
boost::python::class_<Test>("Test")
.def("f", &Test::f)
;
}
//===============================
int main()
{
Py_Initialize();
//==========add this============
inithello();
//===============================
boost::python::object main = boost::python::import("__main__");
boost::python::object global(main.attr("__dict__"));
boost::python::object result = boost::python::exec_file("E:\\python2.py", global, global);
boost::python::object foo = global["foo"];
if(!foo.is_none())
{
boost::shared_ptr<Test> o(new Test);
foo(boost::python::ptr(o.get()));
}
return 0;
}
另一个话题 https://stackoverflow.com/questions/5055443/boost-python-how-to-pass-a-c-class-instance-to-a-python-class
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)