7

I want use embed python in c++ app and call functions defined in python script. The function's parameter is a c++ object. See my code:

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()

How to pass c++ object to foo? I know swig can do that, but boost::python?

1

2 Answers 2

3

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;
}

another topic

Sign up to request clarification or add additional context in comments.

Comments

2

You need to expose your Test type to Python, as shown here: http://wiki.python.org/moin/boost.python/HowTo

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.