Я новичок в 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