Как связать boost::iterator_range класса Iterator с помощью Boost PythonC++

Программы на C++. Форум разработчиков
Anonymous
Как связать boost::iterator_range класса Iterator с помощью Boost Python

Сообщение Anonymous »

Я новичок в boost::python, поэтому, пожалуйста, простите меня, если задаю глупый вопрос. Я пытаюсь привязать классы Container и Iterator к Python. Мой контейнер похож на матрицу элементов, где к каждой строке можно получить доступ через метод Iterate(), который возвращает boost::iterator_range моего Iterator. В Iterator реализованы различные операторы: ++, !=, == и * для получения экземпляра Accessor, который может получить доступ к данным элемента. Код выглядит следующим образом:

Код: Выделить всё

class Accessor {
ItemValue get_value_item() {...}
};

class Iterator {
public:
Iterator &operator++();
Iterator &operator++(int);
bool operator==(...);
bool operator!=(...);
Accessor operator*() const {
return Accessor(idx_);
}
private:
int idx_;
};

class Container {
public:
boost::iterator_range Iterate(int id) {
return boost::iterator_range(Iterator(...), Iterator(...));
}
};

Я ожидаю, что код Python будет выглядеть так:

Код: Выделить всё

container = Container()
def func(id):
for record in container.Iterate(id):
print(record.get_accessor.get_value_item())
Я могу привязать только класс Container и застрял при привязке класса Iterator, потому что понятия не имею, как привязать этот оператор к Python. Я не знаком с Python, поэтому не совсем понимаю, как работает итерация в Python.
Как мне предоставить Iterator и boost::iterator_range на Python?

Подробнее здесь: https://stackoverflow.com/questions/781 ... ost-python

Вернуться в «C++»