создать boost :: python :: object из некопируемого экземпляра - PullRequest
2 голосов
/ 18 октября 2011

Мне было интересно, сможет ли кто-нибудь здесь помочь мне решить следующую проблему, с которой я столкнулся.

Кажется, я не могу создать boost :: python :: object из класса c ++, который я привязал к python, который нельзя скопировать. Вот упрощенный пример ..

#include <boost/python.hpp>

class A
{
public:
    static A*
    create() {return new A;}

protected:
    A(){}
};

void
doSomething(const A& a)
{
    boost::python::object obj(a);
}

BOOST_PYTHON_MODULE(test)
{
    boost::python::class_<A, boost::noncopyable>("A", boost::python::no_init)
    .def("__init__", boost::python::make_constructor(&A::create));

    boost::python::def("doSomething", &doSomething);
}

Затем во время выполнения в Python

import test
a = test.A()
test.doSomething(a)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: No to_python (by-value) converter found for C++ type: A

Я понимаю, что параметр boost :: noncopyable препятствует регистрации конвертера to_python для A. Кто-нибудь знает, как я мог бы создать boost :: python :: object из экземпляра A?

спасибо заранее!

1 Ответ

2 голосов
/ 16 ноября 2011

Используйте это

boost::python::object obj(**boost::cref(a)**);
...