Где повысить регистр Python от преобразователей Python для встроенных типов, таких как из PyLong_Type
в double
?
Я хочу определить конвертер, который может взять numpy.float128
из питона и возвращает long double
для функций в C ++. Я уже сделал это наоборот, конвертер to_python. Для этого я подправил builtin_converters.hpp
но я не нашел, как Boost Python делает преобразование из Python.
Преобразование из python фактически выполняется в builtin_converters.cpp
а не в заголовочной части библиотеки. Я скопировал этот файл и удалил все, кроме конвертера для long double
, который я тогда смог изменить.
Я добавлю к этому ответу, хотя для немного другой проблемы:
Как вы можете конвертировать объекты типа Python (то есть PyTypeObject
такие как PyLong_Type
, PyBool_Type
, PyUnicode_Type
и т. д.) boost::python::object
?
Кажется, это работает нормально:
namespace bp = boost::python;
bp::object float_Type = bp::borrowed(
bp::downcast<PyTypeObject>(&PyFloat_Type))));
В результате вы можете выставить фактические объекты типа в Python через Boost Python объекты.