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

boost/python/iterator.hpp

Boost , Boost.Python Reference Manual , Chapter 2. High Level Components

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 iterators от C++ Контейнеры и итераторы. Обратите внимание, что если ваш class_ поддерживает итераторы случайного доступа, реализация __getitem__ (также известный как Протокол по последовательности) может служить вам лучше, чем использование этого объекта: Python автоматически создаст для вас итераторный тип (см. iter()), и каждый доступ может быть проверен по диапазону, не оставляя возможности доступа через аннулированный итератор C++.

Встанции итератор<C,P> имеют ссылку на вызываемый объект Python, который, при наложении от Python, ожидает единого аргумента с конвертируемым в C и создает итератор Python, который пересекает [c.begin,c Дополнительные CallPolicies P могут быть использованы для контроля того, как элементы возвращаются во время итерации.

В приведенной ниже таблице c является примером контейнера.

Параметры шаблона

Требования

Семантика

По умолчанию

Контейнер

[c.begin(),c.end()) является действительным диапазоном Итератора.

Результат преобразует свой аргумент в c и call c.begin() и c.end() для приобретения итераторов. Чтобы вызвать констант Контейнера begin() и энд() функции, сделайте его запором.

Следующая политика

По умолчанию структурированная модель CallPolicies.

Applied to the resulting iterators' next() method.

Неопределенная модель CallPolicies, которая всегда делает копию результата переноса основного итератора C++.

namespace boost { namespace python
  {
    template <class Container, class NextPolicies = unspecified>
    struct iterator : object
    {
      iterator();
    };
  }}
iterator()

Effects

Инициализирует свой базовый класс в результате:

range<NextPolicies>(&iterators<Container>::begin, &iterators<Container>::end)
Postconditions

This->get() указывает на значимый объект Python, который создает итератор Python, как описано выше.

Rationale

Предоставляет простой способ создания итераторов для общего случая, когда завернутый класс C++ обеспечивает begin() и end().

Шаблон полезного класса, который обеспечивает способ надежно назвать его аргумент begin() и end() функции члена. Обратите внимание, что нет портативного способа взять адрес функции члена стандартной библиотеки C++, поэтому iterators<> может быть особенно полезным при их обертке.

В приведенной ниже таблице x является примером C.

Требуемое подтверждение

Тип

x.begin()

Convertible to C::const_iterator if C is a const type; Convertible to C::iterator otherwise.

x.end()

Convertible to C::const_iterator if C is a const type; Convertible to C::iterator otherwise.

namespace boost { namespace python
{
  template <class C>
  struct iterators
  {
      typedef typename C::const_iterator iterator;
      static iterator begin(C& x);
      static iterator end(C& x);
  };
}}

Если C - это тип минусов,

typedef typename C::const_iterator iterator;

В противном случае:

typedef typename C::iterator iterator;
static iterator begin(C&);

Returns

x.begin()

static iterator end(C&);

Returns

x.end()

template <class NextPolicies, class Target, class Accessor1, class Accessor2>
object range(Accessor1 start, Accessor2 finish);
template <class NextPolicies, class Accessor1, class Accessor2>
object range(Accessor1 start, Accessor2 finish);
template <class Accessor1, class Accessor2>
object range(Accessor1 start, Accessor2 finish);

Requires

NextPolicies - это по умолчанию структурированная модель CallPolicies.

Effects

Первая форма создает значимый объект Python, который, при наложении, преобразует свой аргумент в целевой объект x и создает итератор Python, который проходит через [bind(start,_" ("2>x), bind(финиш,_">>>>>> Вторая форма идентична первой, за исключением того, что Цель выводится из Accessor1 следующим образом:

  1. Если Accessor1 является типом функции, Target является типом его первого аргумента.
  2. Если Accessor1 является указателем-членом данных формы R (T::*), Цель идентична T.
  3. Если Accessor1 является указателем функции-членом формы R (T::*"arguments...) cv-opt, где cv-opt является факультативным cv-qualifier, Цель идентична T.

Третья форма идентична второй, за исключением того, что NextPolicies является неопределенной моделью CallPolicies который всегда делает копию результата отсрочки базового итератора C++

Rationale

Использование boost::bind() позволяет доступ к итераторам C++ через функции, функции или указатели-члены данных. Настройка NextPolicies (например, с использованием return_internal_reference) полезна, когда копировать элементы последовательности обернутого класса дорого. Настройка цели полезна, когда Accessor1 является функциональным объектом, или когда базовый класс предполагаемого целевого типа в противном случае будет выведен.

#include <boost/python/module.hpp>
#include <boost/python/class.hpp>
#include <vector>
using namespace boost::python;
BOOST_PYTHON_MODULE(demo)
{
    class_<std::vector<double> >("dvec")
        .def("__iter__", iterator<std::vector<double> >())
        ;
}

PrevUpHomeNext

Статья boost/python/iterator.hpp раздела Boost.Python Reference Manual Chapter 2. High Level Components может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Chapter 2. High Level Components ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 21:51:03/0.0098199844360352/1