У меня есть общая библиотека на C ++, и я хочу использовать ее в моей программе Python. Я использую Boost :: Python, чтобы обернуть библиотеку. Я использую Ubuntu 18.04 с python 3.6 и бустом 1.65.1
Например:
int foo(MyObject& p1, int p2);
BOOST_PYTHON_MODULE(pyModule) {
boost::python::class_<MyObject>("PyMyObject", boost::python::init<>());
boost::python::def("pyFoo", foo);
}
В python
import pyModule
a = PyMyObject()
res = pyModule.pyFoo(a, 1)
Этот код работает. Но проблема заключается в строке документации и информации, возвращаемой функцией help () python.
Если я сделаю
help(pyModule)
, то получу
1. pyFoo(...)
2. pyFoo( (object)arg1, (object)arg2) -> int :
3.
4. C++ signature :
5. int foo(MyObject {lvalue}, int);
В строке 1 У меня не было списка параметров, тогда в моем коде Visual Studio или pyCharm он не может дать параметры, которые я должен написать. Например, в пакете opencv, если я напишу cv2.imread(
, в этот момент моя IDE сообщит мне, какой аргумент я должен предоставить. С моей оберткой у меня нет никакой информации.
В строке 2: я не знаю почему, но иногда вместо того, чтобы иметь реальный тип аргумента, у меня есть объект. Иногда у меня правильный тип, например, int или float.
Я не знаю, что сделал что-то не так. Что мне нужно с моей оболочкой, так это получить список аргументов, когда я использую IDE, как показано на рисунке ниже, и иметь правильную строку документации в help()
Пример подсказки в моем VSCode
РЕДАКТИРОВАТЬ 1: Я нашел эту ссылку для Cython, опция bindings, кажется, пишет правильную сигнатуру функции, вместо fun c (...), мы получаем fun c (a, b), что лучше для python переводчик, чтобы знать, каковы аргументы. Опция привязки Cython Я не нашел ни одной эквивалентной опции в Boost python
С уважением,