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

boost/python/object.hpp

Boost , Boost.Python Reference Manual , Chapter 3. Object Wrappers

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

Разоблачает общий объект класса обертки Python и связанные с ним классы. Чтобы избежать некоторых потенциальных проблем с поиском, зависящим от аргументов, и обобщенными операторами, определенными на объекте, все эти объекты определяются в увеличении пространства имен::python::api, и объект импортируется в увеличение пространства имен::python с помощью декларации использования.

class slice_nil;
static const _ = slice_nil();

Тип, который можно использовать для получения эффекта исключения индекса в выражении среза Python:

>>> x[:-1]
>>> x[::-1]

Эквивалент C++:

x.slice(_,-1)
x[slice(_,_,-1)]

Политики, которые используются для прокси, представляющих доступ атрибута к объекту const.

namespace boost { namespace python { namespace api
{
  struct const_attribute_policies
  {
      typedef char const* key_type;
      static object get(object const& target, char const* key);
  };
}}}
static object get(object const& target, char const* key);

Requires

Ключ - этоntbs.

Effects

получает доступ к атрибуту цели, названному ключом.

Returns

Объект, управляющий результатом доступа к атрибуту.

Throws

Ошибка_already_setЕсли вы используете Python.

Политики, которые используются для прокси, представляющих доступ атрибута к изменчивому объекту.

namespace boost { namespace python { namespace api
{
  struct attribute_policies : const_attribute_policies
  {
      static object const& set(object const& target, char const* key, object const& value);
      static void del(object const&target, char const* key);
  };
}}}
static object const& set(object const& target, char const* key, object const& value);

Requires

Ключ - этоntbs.

Effects

устанавливает атрибут цели, названный ключом к значению.

Throws

Ошибка_already_setЕсли вы используете Python.

static void del(object const&target, char const* key);

Requires

Ключ - этоntbs.

Effects

Удалить атрибут цели, названный ключом.

Throws

Ошибка_already_setЕсли вы используете Python.

Политики, которые используются для прокси, представляющих доступ атрибута к объекту const, когда имя атрибута дается как объект const.

namespace boost { namespace python { namespace api
{
  struct const_objattribute_policies
  {
      typedef object const& key_type;
      static object get(object const& target, object const& key);
  };
}}}
static object get(object const& target, object const& key);

Requires

Ключ — это объект, удерживающий струну.

Effects

получает доступ к атрибуту цели, названному ключом.

Returns

Объект, управляющий результатом доступа к атрибуту.

Throws

Ошибка_already_setЕсли вы используете Python.

Политики, которые используются для прокси, представляющих доступ атрибута к изменяемому объекту, когда имя атрибута дается как объект const.

namespace boost { namespace python { namespace api
{
  struct objattribute_policies : const_objattribute_policies
  {
      static object const& set(object const& target, object const& key, object const& value);
      static void del(object const&target, object const& key);
  };
}}}
static object const& set(object const& target, object const& key, object const& value);

Requires

Ключ — это объект, удерживающий струну.

Effects

устанавливает атрибут цели, названный ключом к значению.

Throws

Ошибка_already_setЕсли вы используете Python.

static void del(object const&target, object const& key);

Requires

Ключ — это объект, удерживающий струну.

Effects

Удалить атрибут цели, названный ключом.

Throws

Ошибка_already_setЕсли вы используете Python.

Политики, которые используются для прокси, представляющих доступ к предмету (через операторов кронштейнов Python) к объекту const.

namespace boost { namespace python { namespace api
{
  struct const_item_policies
  {
      typedef object key_type;
      static object get(object const& target, object const& key);
  };
}}}
static object get(object const& target, object const& key);

Effects

доступ к элементу цели, указанному ключом.

Returns

Объект, управляющий результатом доступа к предмету.

Throws

Ошибка_already_setЕсли вы используете Python.

Политики, которые используются для прокси, представляющих доступ к предмету (через операторов кронштейнов Python) к изменяемому объекту.

namespace boost { namespace python { namespace api
{
  struct item_policies : const_item_policies
  {
      static object const& set(object const& target, object const& key, object const& value);
      static void del(object const& target, object const& key);
  };
}}}
static object const& set(object const& target, object const& key, object const& value);

Effects

устанавливает элемент цели, определенный ключом к значению.

Throws

Ошибка_already_setЕсли вы используете Python.

static void del(object const& target, object const& key);

Effects

удаляет элемент цели, указанный ключом.

Throws

Ошибка_already_setЕсли вы используете Python.

Политики, которые используются для прокси-серверов, представляющих доступ к срезу (через обозначение срезов Python [x:y]) к объекту const.

namespace boost { namespace python { namespace api
{
  struct const_slice_policies
  {
      typedef std::pair<handle<>, handle<> > key_type;
      static object get(object const& target, key_type const& key);
  };
}}}
static object get(object const& target, key_type const& key);

Effects

получает доступ к срезу цели, указанному ключом.

Returns

Объект, управляющий результатом среза доступа.

Throws

Ошибка_already_setЕсли вы используете Python.

Политики, которые используются для прокси-серверов, представляющих доступ к изменяемому объекту.

namespace boost { namespace python { namespace api
{
  struct slice_policies : const_slice_policies
  {
      static object const& set(object const& target, key_type const& key, object const& value);
      static void del(object const& target, key_type const& key);
  };
}}}
static object const& set(object const& target, key_type const& key, object const& value);

Effects

устанавливает срез цели, заданный ключом к значению.

Throws

Ошибка_already_setЕсли вы используете Python.

static void del(object const& target, key_type const& key);

Effects

удаляет срез цели, указанный ключом.

Throws

Ошибка_already_setЕсли вы используете Python.

Это базовый класс объекта и его шаблон прокси, используемый для обеспечения общего интерфейса: функции-члены и операторы, которые должны быть определены в корпусе класса. Его параметр шаблона U, как ожидается, будет классом, полученным из object_operators. На практике пользователи никогда не должны использовать этот класс напрямую, но он документирован здесь, потому что он предоставляет важный интерфейс для объекта и его прокси.

namespace boost { namespace python { namespace api
{
  template <class U>
  class object_operators
  {
   public:
      // function call
      //
      object operator()() const;
      template <class A0>
      object operator()(A0 const&) const;
      template <class A0, class A1>
      object operator()(A0 const&, A1 const&) const;
      ...
      template <class A0, class A1,...class An>
      object operator()(A0 const&, A1 const&,...An const&) const;
      detail::args_proxy operator* () const;
      object operator()(detail::args_proxy const &args) const;
      object operator()(detail::args_proxy const &args,
                        detail::kwds_proxy const &kwds) const;
      // truth value testing
      //
      typedef unspecified bool_type;
      operator bool_type() const;
      // Attribute access
      //
      proxy<const_object_attribute> attr(char const*) const;
      proxy<object_attribute> attr(char const*);
      proxy<const_object_objattribute> attr(object const&) const;
      proxy<object_objattribute> attr(object const&);
      // item access
      //
      template <class T>
      proxy<const_object_item> operator[](T const& key) const;
      template <class T>
      proxy<object_item> operator[](T const& key);
      // slicing
      //
      template <class T, class V>
      proxy<const_object_slice> slice(T const& start, V const& end) const
      template <class T, class V>
      proxy<object_slice> slice(T const& start, V const& end);
  };
}}}
object operator()() const;
template <class A0>
object operator()(A0 const&) const;
template <class A0, class A1>
object operator()(A0 const&, A1 const&) const;
...
template <class A0, class A1,...class An>
object operator()(A0 const& a1, A1 const& a2,...An const& aN) const;

Effects

<call<object>(object(*static_cast<U*>(this)).ptr(), a1, a2,...aN)>

object operator()(detail::args_proxy const &args) const;

Effects

<callobject witharguments givenby thetuple args>

object operator()(detail::args_proxy const &args,
                  detail::kwds_proxy const &kwds) const;

Effects

<callobject witharguments givenby thetuple args, andnamed argumentsgiven bythe dictionarykwds>

operator bool_type() const;

Effects

Испытывает истинное значение<*this>.

Returns

<call<object>(object(*static_cast<U*>(this)).ptr(), a1, a2,...aN)>

proxy<const_object_attribute> attr(char const* name) const;
proxy<object_attribute> attr(char const* name);

Requires

Имяntbs.

Effects

Получает доступ к названному атрибуту *это.

Returns

(37) в качестве мишени, и имя в качестве ключа.

proxy<const_object_objattribute> attr(const object& name) const;
proxy<object_objattribute> attr(const object& name);

Requires

Имя — это объект, удерживающий струну.

Effects

Названы имена (38).

Returns

(37) в качестве мишени, и имя в качестве ключа.

template <class T>
proxy<const_object_item> operator[](T const& key) const;
template <class T>
proxy<object_item> operator[](T const& key);

Effects

Для доступа к пункту<*this>, указанному ключом.

Returns

Объект-прокси, который связывает<object(*static_cast<U*>(this))>как свою цель, и объект (ключ) как свой ключ.

template <class T, class V>
proxy<const_object_slice> slice(T const& start; start, V const& finish) const
template <class T, class V>
proxy<object_slice> slice(T const& start; start, V const& finish);

Effects

В ней содержится описание<*this>,<std::make_pair(object(start),object(finish))>.

Returns

(44) в качестве цели, и (45) в качестве ключа.

Цель состоит в том, чтобы объект действовал как можно больше как переменная Python. Таким образом, выражения, которые вы ожидаете использовать в Python, должны работать так же, как и в C++. Большая часть интерфейса объекта обеспечивается его базовым классом<object_operators<object>>и свободными функциями, определенными в этом заголовке.

namespace boost { namespace python { namespace api
{
  class object : public object_operators<object>
  {
   public:
      object();
      object(object const&);
      template <class T>
      explicit object(T const& x);
      ~object();
      object& operator=(object const&);
      PyObject* ptr() const;
      bool is_none() const;
  };
}}}
object();

Effects

Конструирует объект, управляющий ссылкой на объект Python None.

Throws

Ничего.

template <class T>
explicit object(T const& x);

Effects

Преобразует x в python и управляет ссылкой на него.

Throws

error_already_setи устанавливает исключение Python TypeError, если такое преобразование невозможно.

~object();

Effects

Снижает количество ссылок на внутренне удерживаемый объект.

PyObject* ptr() const;

Returns

указатель на внутренний объект Python.

bool is_none() const;

Returns

Результат<(ptr()==Py_None)>

Этот шаблон инстанцируется с различными политиками, описанными в этом документе, для реализации атрибута, элемента и доступа к срезам для объекта. Он хранит объект типа Политики::key_type.

namespace boost { namespace python { namespace api
{
  template <class Policies>
  class proxy : public object_operators<proxy<Policies> >
  {
   public:
      operator object() const;
      proxy const& operator=(proxy const&) const;
      template <class T>
      inline proxy const& operator=(T const& rhs) const;
      void del() const;
      template <class R>
      proxy operator+=(R const& rhs);
      template <class R>
      proxy operator-=(R const& rhs);
      template <class R>
      proxy operator*=(R const& rhs);
      template <class R>
      proxy operator/=(R const& rhs);
      template <class R>
      proxy operator%=(R const& rhs);
      template <class R>
      proxy operator<<=(R const& rhs);
      template <class R>
      proxy operator>>=(R const& rhs);
      template <class R>
      proxy operator&=(R const& rhs);
      template <class R>
      proxy operator|=(R const& rhs);
  };
}}}
operator object() const;

Effects

Применяется<Policies::get(target,key)>с целью прокси и ключевыми объектами.

proxy const& operator=(proxy const& rhs) const;
template <class T>
inline proxy const& operator=(T const& rhs) const;

Effects

<Policies::set(target, key, object(rhs))>с целью прокси и ключевыми объектами.

template <class R>
proxy operator+=(R const& rhs);
template <class R>
proxy operator-=(R const& rhs);
template <class R>
proxy operator*=(R const& rhs);
template <class R>
proxy operator/=(R const& rhs);
template <class R>
proxy operator%=(R const& rhs);
template <class R>
proxy operator<<=(R const& rhs);
template <class R>
proxy operator>>=(R const& rhs);
template <class R>
proxy operator&=(R const& rhs);
template <class R>
proxy operator|=(R const& rhs);

Effects

<operator@=>,<object(*this)@=rhs;>,<object(*this)@=rhs;>.

Returns

<*this>

void del() const;

Effects

Политика: del (цель, ключ) с целью прокси и ключевыми объектами.

template <class T>
void del(proxy<T> const& x);

Effects

<x.del()>

template<class L,class R> object operator>(L const&l,R const&r);
template<class L,class R> object operator>=(L const&l,R const&r);
template<class L,class R> object operator<(L const&l,R const&r);
template<class L,class R> object operator<=(L const&l,R const&r);
template<class L,class R> object operator==(L const&l,R const&r);
template<class L,class R> object operator!=(L const&l,R const&r);

Effects

возвращает результат применения оператора к<object(l)>и<object(r)>соответственно в Python.

template<class L,class R> object operator+(L const&l,R const&r);
template<class L,class R> object operator-(L const&l,R const&r);
template<class L,class R> object operator*(L const&l,R const&r);
template<class L,class R> object operator/(L const&l,R const&r);
template<class L,class R> object operator%(L const&l,R const&r);
template<class L,class R> object operator<<(L const&l,R const&r);
template<class L,class R> object operator>>(L const&l,R const&r);
template<class L,class R> object operator&(L const&l,R const&r);
template<class L,class R> object operator^(L const&l,R const&r);
template<class L,class R> object operator|(L const&l,R const&r);

Effects

возвращает результат применения оператора к<object(l)>и<object(r)>соответственно в Python.

template<class R> object& operator+=(object&l,R const&r);
template<class R> object& operator-=(object&l,R const&r);
template<class R> object& operator*=(object&l,R const&r);
template<class R> object& operator/=(object&l,R const&r);
template<class R> object& operator%=(object&l,R const&r);
template<class R> object& operator<<=(object&l,R const&r)
template<class R> object& operator>>=(object&l,R const&r);
template<class R> object& operator&=(object&l,R const&r);
template<class R> object& operator^=(object&l,R const&r);
template<class R> object& operator|=(object&l,R const&r);

Effects

Назначает<l>результат применения соответствующего оператора Python вместо<l>и<object(r)>соответственно.

Returns

л

long len(object const& obj);

Effects

<PyObject_Length(obj.ptr())>

Returns

<len()>Объект.

Код Python:

def sum_items(seq):
   result = 0
   for x in seq:
      result += x
   return result

Версия C++

object sum_items(object seq)
{
   object result = object(0);
   for (int i = 0; i < len(seq); ++i)
      result += seq[i];
   return result;
}

PrevUpHomeNext

Статья boost/python/object.hpp раздела Boost.Python Reference Manual Chapter 3. Object Wrappers может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Chapter 3. Object Wrappers ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 23:38:08/0.013885021209717/1