通过boost :: python将C++对象传递给python函数

jea*_*ean 6 c++ boost-python

我想在c ++ app中使用embed 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;
}
Run Code Online (Sandbox Code Playgroud)

python2.py:

def foo(o):
    o.f()
Run Code Online (Sandbox Code Playgroud)

如何将c ++对象传递给foo?我知道swig可以做到这一点,但是boost :: python?

Jam*_*kin 2

您需要将测试类型公开给 Python,如下所示:http ://wiki.python.org/moin/boost.python/HowTo