Я перемещаю модуль Python, написанный на C ++, из Boost.Python в Pybind11.Мой код C ++ опирается на библиотеку C, которая имеет непрозрачные указатели.С Boost.Python я использовал приведенную здесь документацию для работы с этими непрозрачными указателями: https://www.boost.org/doc/libs/1_66_0/libs/python/doc/html/reference/to_from_python_type_conversion/boost_python_opaque_pointer_conv.html
Я не могу найти эквивалентный код для Pybind11.Для справки, вот заголовок C, который я хочу представить в Python, используя Pybind11:
typedef struct mytruct* mystruct_t;
void myfunction1(mystruct_t x);
mystruct_t myfunction2();
Это можно представить с помощью Boost.Python следующим образом:
BOOST_PYTHON_OPAQUE_SPECIALIZED_TYPE_ID(mystruct)
namespace bpl = boost::python;
BOOST_PYTHON_MODULE(mymodule) {
bpl::opaque<mystruct>();
bpl::def("f1", &myfunction1);
bpl::def("f2", &myfunction2, bpl::return_value_policy<bpl::return_opaque_pointer>());
}