我想将用python编写的函数嵌入到c ++代码中。
我的python代码是:test.py
def func(x=None, y=None, z=None):
print x,y,z
我的c ++代码是:
module = import("test");
namespace = module.attr("__dict__");
//then i want to know how to pass value 'y' only.
module.attr("func")("y=1") // is that right?
答案 0 :(得分:1)
我不确定Boost.Python如前所述实现了**
解除引用运算符,但您仍然可以使用Python C-API来执行您所关注的方法as described here。
以下是该解决方案的原型:
//I'm starting from where you should change
boost::python::object callable = module.attr("func");
//Build your keyword argument dictionary using boost.python
boost::python::dict kw;
kw["x"] = 1;
kw["y"] = 3.14;
kw["z"] = "hello, world!";
//Note: This will return a **new** reference
PyObject* c_retval = PyObject_Call(callable.ptr(), NULL, kw.ptr());
//Converts a new (C) reference to a formal boost::python::object
boost::python::object retval(boost::python::handle<>(c_retval));
将返回值从PyObject_Call
转换为正式boost::python::object
后,您可以从函数中返回它,也可以忘记它,PyObject_Call
返回的新引用将被自动删除。
有关将PyObject*
包装为boost::python::object
的更多信息,请查看Boost.Python教程。 More precisely, at this link, end of the page
答案 1 :(得分:0)
理论答案(没时间尝试自己: - |):
boost::python::dict kw;
kw["y"]=1;
module.attr("func")(**kw);