Код: Выделить всё
#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);
}
Подробнее здесь: https://stackoverflow.com/questions/796 ... h-pybind11
Мобильная версия