Boost Python - конструктор с аргументами - PullRequest
0 голосов
/ 14 июня 2019

Я уже разработал cpp разделяемую библиотеку, и теперь я хочу сделать Python оболочку для ее использования.Все работало нормально, пока не пришлось изменить конструктор библиотеки cpp, добавив в него один параметр.

Я хотел бы знать, как отразить этот параметр в оболочке, потому что приведенный ниже код не работаетбольше.Я сделал некоторые изменения в коде, и теперь это как ниже.Я почти уверен, что проблема в этой строке

py::class_<Wrapper>("Wrapper", py::init<>())

, но я не знаю, как добавить параметр здесь.Я попытался

py::class_<Wrapper>("Wrapper", py::init<>(const std::string &param))

, а также

py::class_<Wrapper>("Wrapper", py::init<const std::string &param>())

, но оба не удалось.

РЕДАКТИРОВАТЬ после некоторых комментариев я решил использовать (без ссылки)

py::class_<Wrapper>("Wrapper", py::init<const std::string param>())

Но у меня все еще остается то же сообщение об ошибке.

wrapper.hpp

#include "mycpplib.hpp"

#include <boost/python.hpp>
#include <boost/python/numpy.hpp>
#include <boost/python/dict.hpp>

namespace py = boost::python;
namespace np = boost::python::numpy;

class Wrapper 
{
    public:

        // change: inclusion of the new parameter
        Wrapper(const std::string &param);

        py::dict function1();
};

wrapper.cpp

#include "wrapper.hpp"

namespace py = boost::python;
namespace np = boost::python::numpy;

// change: inclusion of the new parameter
Wrapper::Wrapper(
    const std::string &param) {
    //do something
}

py::dict
Wrapper::function1() {
    //do something
}

BOOST_PYTHON_MODULE(libwrapper)
{
    Py_Initialize();
    np::initialize();

    py::class_<Wrapper>("Wrapper", py::init<const std::string param1>())
        .def("_function1", &Wrapper::function1)
    ;
}

wrapper.py

import libwrapper

class Wrapper(libwrapper.Wrapper):

    # change: inclusion of the new parameter
    def __init__(self, param):
        libwrapper.Wrapper.__init__(self, param)

    def function1(self):
        return self._function1()

Ошибка:

/path/wrapper.cpp: In function 'void init_module_libwrapper()':
/path/wrapper.cpp:24:69: error: template argument 1 is invalid
py::class_<Wrapper>("Wrapper", py::init<const std::string param1>())
                                                                 ^

1 Ответ

0 голосов
/ 14 июня 2019

Повторная проверка документации наддува (https://www.boost.org/doc/libs/1_68_0/libs/python/doc/html/tutorial/tutorial/exposing.html) Я обнаружил, что это:

py::class_<Wrapper>("Wrapper", py::init<const std::string param1>())

Должно быть написано так:

py::class_<Wrapper>("Wrapper", py::init<const std::string>())

без имени параметраПросто введите

...