Привязывающий std :: generator с pybind11?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Привязывающий std :: generator с pybind11?

Сообщение Anonymous »

Я пытаюсь связать std :: Generator с генератором Python через pybind11 , я использую следующее в настоящее время:

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

#include 
#include 

#include 
#include 

namespace py = pybind11;

std::generator f1(int n = 0) {
while (true) { co_yield n++; }
}

std::generator f2(int n = 0) {
co_yield n;
co_yield std::ranges::elements_of(f1(n + 1));
}

PYBIND11_MODULE(test_generator, m) {
py::class_(m, "_generator_int", pybind11::module_local())
.def("__iter__",
[](std::generator& gen) -> std::generator& {
return gen;
})
.def("__next__", [](std::generator& gen) {
auto it = gen.begin();
if (it != gen.end()) { return *it; }
else                 { throw py::stop_iteration(); }
});

m.def("f1", &f1, py::arg("n") = 0);
m.def("f2", &f2, py::arg("n") = 0);
}
Приведенный выше код работает с F1 , но не F2 - если f2 (0) называется в Python, он будет генерировать значение только 0 и 1 , поэтому я предполагаю, что моя реализация не работает со STD :: ranges :: elements_of std :: ranges :: elements_of без изменения f2 ?


Подробнее здесь: https://stackoverflow.com/questions/796 ... h-pybind11
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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