Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

boost/python/lvalue_from_pytype.hpp

Boost , Boost.Python Reference Manual , Chapter 5. To/From Python Type Conversion

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

предоставляет объект для извлечения объектов C++ из экземпляров Python данного типа. Это обычно полезно для работы с «традиционными» типами расширения Python.

Шаблон класса lvalue_from_pytype регистрируется из конвертеров_python, которые, учитывая объект данного типа Python, могут извлекать ссылки и указатели на определенный тип C++. Ее аргументами являются:

In the table below, x denotes an object of type PythonObject&

Параметр

Требования

Семантика

Экстрактор

модель Extractor, функция исполнения которой возвращает исходный тип.

Извлекает значение l из объекта Python после подтверждения его типа

python_type

Константа компиляции-времени PyTypeObject*

Тип Python экземпляров конвертируемый этим конвертером. Подтипы Python также конвертируемые.

namespace boost { namespace python
{
   template <class Extractor, PyTypeObject const* python_type>
   struct lvalue_from_pytype
   {
       lvalue_from_pytype();
   };
}}
lvalue_from_pytype();

Effects

Регистрирует конвертеры, которые могут конвертировать объекты Python данного типа в значения типа, возвращенные Extractor::execute.

extract_identity - это модель Extractor, которая может использоваться в общем случае, когда тип C++, который должен быть извлечен, такой же, как тип объекта Python.

namespace boost { namespace python
{
   template <class InstanceType>
   struct extract_identity
   {
      static InstanceType& execute(InstanceType& c);
   };
}}
InstanceType& execute(InstanceType& c);

Returns

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);

Returns

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

PrevUpHomeNext

Статья 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 ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 18:46:26/0.0070202350616455/0