![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
boost/python/iterator.hppBoost , Boost.Python Reference Manual , Chapter 2. High Level Components
|
Параметры шаблона |
Требования |
Семантика |
По умолчанию |
---|---|---|---|
Контейнер |
|
Результат преобразует свой аргумент в c и call c.begin() и c.end() для приобретения итераторов. Чтобы вызвать констант Контейнера |
|
Следующая политика |
По умолчанию структурированная модель CallPolicies. |
Applied to the resulting iterators' |
Неопределенная модель CallPolicies, которая всегда делает копию результата переноса основного итератора C++. |
namespace boost { namespace python { template <class Container, class NextPolicies = unspecified> struct iterator : object { iterator(); }; }}
iterator()
Инициализирует свой базовый класс в результате:
range<NextPolicies>(&iterators<Container>::begin, &iterators<Container>::end)
This->get()
указывает на значимый объект Python, который создает итератор Python, как описано выше.
Предоставляет простой способ создания итераторов для общего случая, когда завернутый класс 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&);
x.begin()
static iterator end(C&);
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);
NextPolicies - это по умолчанию структурированная модель CallPolicies.
Первая форма создает значимый объект Python, который, при наложении, преобразует свой аргумент в целевой объект x и создает итератор Python, который проходит через [bind(start,_" ("2>x), bind(финиш,_">>>>>> Вторая форма идентична первой, за исключением того, что Цель выводится из Accessor1 следующим образом:
R (T::*)
, Цель идентична T
.R (T::*"arguments...) cv-opt
, где cv-opt является факультативным cv-qualifier, Цель идентична T
.Третья форма идентична второй, за исключением того, что NextPolicies является неопределенной моделью CallPolicies который всегда делает копию результата отсрочки базового итератора C++
Использование 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> >()) ; }
Статья boost/python/iterator.hpp раздела Boost.Python Reference Manual Chapter 2. High Level Components может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Chapter 2. High Level Components ::
реклама |