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

Models of ResultConverter

Boost , Boost.Python Reference Manual , Chapter 4. Function Invocation and Creation

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
<boost/python/to_python_indirect.hpp> supplies a way to construct new Python objects that hold wrapped C++ class instances via a pointer or smart pointer.
[endsect]

Шаблон класса<to_python_indirect>преобразует объекты своего первого типа аргумента в python в качестве экземпляров класса расширения, используя политику владения, предусмотренную его 2-м аргументом.

Параметр

Требования

Описание

Т

Либо<Ucv&>(где cv является любой факультативной квалификацией cv), либоОтносительныйтип, такой, что<*x>является конвертируемым в<Uconst&>, где<U>является классным типом.

<A>Отнесение типа к классу C++, подверженному воздействию Python, с использованием шаблона классов<class_>

.

МакХолдер

<h= MakeHolder::execute(p);>

Класс, статичность которого<execute()>создает<instance_holder>

.

Обоснования to_python_indirect являются моделями<ResultConverter>.

namespace boost { namespace python
{
  template <class T, class MakeHolder>
  struct to_python_indirect
  {
     static bool convertible();
     PyObject* operator()(T ptr_or_reference) const;
   private:
     static PyTypeObject* type();
  };
}}
PyObject* operator()(T x) const;

Requires

<x>относится к объекту (если это тип указателя, то он ненулевой).<convertible() ==true>.

Effects

Создает правильно подобранный буст. В экземпляре класса расширений Python используется MakeHolder для создания держателя экземпляров из x, устанавливается держатель экземпляров в новом экземпляре класса расширений и возвращается указатель на него.

bool convertible()

Effects

Возвращает истинное значение любой модуль, зарегистрированный тип Python, соответствующий U.

Этот пример повторяет функциональность<reference_existing_object>, но без некоторой проверки ошибок времени компиляции.

struct make_reference_holder
{
   typedef boost::python::objects::instance_holder* result_type;
   template <class T>
   static result_type execute(T* p)
   {
      return new boost::python::objects::pointer_holder<T*, T>(p);
   }
};
struct reference_existing_object
{
   // metafunction returning the ResultConverter
   template <class T>
   struct apply
   {
      typedef boost::python::to_python_indirect<T,make_reference_holder> type;
   };
};

<to_python_value>— это модельResultConverter, которая копирует свой аргумент в новый объект Python.

namespace boost { namespace python
{
   template <class T>
   struct to_python_value
   {
      typedef typename add_reference<
         typename add_const<T>::type
      >::type argument_type;
      static bool convertible();
      PyObject* operator()(argument_type) const;
   };
}}
static bool convertible();

Returns

<true>Был зарегистрирован преобразователь, который может преобразовывать<T>в питон по стоимости.

PyObject* operator()(argument_type x) const;

Requires

<convertible() ==true>

Effects

Преобразует<x>в питон

Returns

Полученный объект Python iff для<T>был зарегистрирован,<0>в противном случае.


PrevUpHomeNext

Статья Models of ResultConverter раздела Boost.Python Reference Manual Chapter 4. Function Invocation and Creation может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Chapter 4. Function Invocation and Creation ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 01:19:09/0.0042259693145752/0