![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
boost/python/lvalue_from_pytype.hppBoost , Boost.Python Reference Manual , Chapter 5. To/From Python Type Conversion
|
Параметр |
Требования |
Семантика |
---|---|---|
Экстрактор |
модель |
Извлекает значение l из объекта Python после подтверждения его типа |
python_type |
Константа компиляции-времени |
Тип Python экземпляров конвертируемый этим конвертером. Подтипы Python также конвертируемые. |
namespace boost { namespace python { template <class Extractor, PyTypeObject const* python_type> struct lvalue_from_pytype { lvalue_from_pytype(); }; }}
lvalue_from_pytype();
Регистрирует конвертеры, которые могут конвертировать объекты Python данного типа в значения типа, возвращенные Extractor::execute.
extract_identity - это модель Extractor
, которая может использоваться в общем случае, когда тип C++, который должен быть извлечен, такой же, как тип объекта Python.
namespace boost { namespace python { template <class InstanceType> struct extract_identity { static InstanceType& execute(InstanceType& c); }; }}
extract_member
является моделью Extractor
, которая может быть использована в общем случае, когда тип C++, который должен быть извлечен, является членом объекта Python.
namespace boost { namespace python { template <class InstanceType, class MemberType, MemberType (InstanceType::*member)> struct extract_member { static MemberType& execute(InstanceType& c); }; }}
static MemberType& execute(InstanceType& c);
c.*член
Этот пример предполагает, что кто-то реализовал стандартный модуль кивочного примера из документации Python, и мы хотим создать модуль, который манипулирует Noddys. С Нодди Нодди Объект настолько прост, что не несет никакой интересной информации, пример немного запутан: он предполагает, что вы хотите отслеживать один конкретный объект по какой-то причине. Этот модуль должен быть динамически связан с модулем, который определяет noddy_ Нодди.
В C++:
#include <boost/python/module.hpp> #include <boost/python/handle.hpp> #include <boost/python/borrowed.hpp> #include <boost/python/lvalue_from_pytype.hpp> // definition lifted from the Python docs typedef struct { PyObject_HEAD } noddy_NoddyObject; using namespace boost::python; static handle<noddy_NoddyObject> cache; bool is_cached(noddy_NoddyObject* x) { return x == cache.get(); } void set_cache(noddy_NoddyObject* x) { cache = handle<noddy_NoddyObject>(borrowed(x)); } BOOST_PYTHON_MODULE(noddy_cache) { def("is_cached", is_cached); def("set_cache", set_cache); // register Noddy lvalue converter lvalue_from_pytype<extract_identity<noddy_NoddyObject>,&noddy_NoddyType>(); }
В Python:
>>> import noddy >>> n = noddy.new_noddy() >>> import noddy_cache >>> noddy_cache.is_cached(n) 0 >>> noddy_cache.set_cache(n) >>> noddy_cache.is_cached(n) 1 >>> noddy_cache.is_cached(noddy.new_noddy()) 0
Статья boost/python/lvalue_from_pytype.hpp раздела Boost.Python Reference Manual Chapter 5. To/From Python Type Conversion может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Chapter 5. To/From Python Type Conversion ::
реклама |