将C++对象传递给python函数by boost :: python
问题描述:
我想在C++应用程序中使用嵌入python并调用python脚本中定义的函数。该函数的参数是一个C++对象。见我的代码:将C++对象传递给python函数by boost :: python
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?
答
解决。
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;
}
[升压-蟒如何C++类实例传递给一个python类(的可能重复http://*.com/questions/5055443/boost-python-how-to -pass-AC-类实例到一个的Python类) – 2012-02-01 00:22:02