Я уже разработал cpp
разделяемую библиотеку, и теперь я хочу сделать Python
оболочку для ее использования.Все работало нормально, пока не пришлось изменить конструктор библиотеки cpp
, добавив в него один параметр.
Я хотел бы знать, как отразить этот параметр в оболочке, потому что приведенный ниже код не работаетбольше.Я сделал некоторые изменения в коде, и теперь это как ниже.Я почти уверен, что проблема в этой строке
py::class_<Wrapper>("Wrapper", py::init<>())
, но я не знаю, как добавить параметр здесь.Я попытался
py::class_<Wrapper>("Wrapper", py::init<>(const std::string ¶m))
, а также
py::class_<Wrapper>("Wrapper", py::init<const std::string ¶m>())
, но оба не удалось.
РЕДАКТИРОВАТЬ после некоторых комментариев я решил использовать (без ссылки)
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 ¶m);
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 ¶m) {
//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>())
^