Невозможно использовать make_constructor в boost :: python при объявлении внешнего конструктора - PullRequest
0 голосов
/ 19 апреля 2019

Я пытаюсь определить внешний конструктор при переносе класса на python, с помощью make_constructor абсолютно не удается. Когда я пытаюсь:

#include <boost/python/numpy.hpp>
using boost::python;

class foo
{
    int i;
public:
    foo(int i) : i(i){}
};

foo foo_create(int i){return foo(i);}

BOOST_PYTHON_MODULE(bar)
{
    class_<foo>("foo")
        .def("__init__", make_constructor(&foo_create));
}

Я получаю следующую ошибку

error: no type named ‘element_type’ in ‘class foo’

Я пытался использовать noinit и init () с тем же результатом. Что я делаю не так?

1 Ответ

0 голосов
/ 19 апреля 2019

Мы нашли проблему, отчасти это была действительно редкая документация по make_construction.Мне нужно было вернуть ptr в новый экземпляр, например, так (в этом случае я сделал их общими указателями):

#include <boost/python/numpy.hpp>
#include <memory>
using boost::python;

class foo
{
    int i;
public:
    foo(int i) : i(i){}
};

std::shared_ptr<foo> foo_create(int i){return std::shared_ptr<foo>(foo(i));}

BOOST_PYTHON_MODULE(bar)
{
    class_<foo, std::shared_ptr<foo>>("foo")
        .def("__init__", make_constructor(&foo_create));
}

Документация по make_constructor действительно скудна, но здесь есть некоторые обсуждения: https://wiki.python.org/moin/boost.python/HowTo под точкой "9".

...