Mengimplementasikan Generator dengan Makro di C++

Para penggemar telah menulis generator dalam C++ berdasarkan notasi do, yang juga dibuat dengan makro. Implementasinya bersifat open source di bawah lisensi MIT. // Tanpa notasi do auto result = ::bind(mx, [&](auto&& x) { return ::bind(my, [&](auto&& y) { return make_value(x + y); }); }); // Dengan notasi do auto result = DO( LET x IS(mx); LET y IS(my); return make_value(x + y); );

Contoh kode dengan generator: // Generator bebas alokasi constexpr auto my_generator() { return GENERATOR((int i), (.i = 0), // atau LINGKARAN_GENERATOR HASIL(42); SELAMA(i != 10) ( HASIL(i); ++i; ) kembali akhir (); ); } static_assert(std::ranges::equal(my_generator(), std::array{42, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9})); int main() { auto gen = my_generator(); gen.i = 3; std::println("{}", gen); // mencetak [42, 3, 4, 5, 6, 7, 8, 9] /* for (auto i : gen) { std::println("{}", i); } */ }

Generator didefinisikan dengan fungsi bind dan fungsi dasar, generator_continuation. Setiap bind sekarang dieksekusi secara tunda (lazily), alih-alih mengevaluasi semuanya sekaligus. Kode ini menyediakan dua versi: satu berdasarkan fungsi virtual dan satu berdasarkan analog std::variant menggunakan Type Loopholes untuk kinerja yang lebih baik.

Sumber: opennet.ru

Beli hosting yang andal untuk situs dengan perlindungan DDoS, server VPS VDS 🔥 Beli hosting website andal dengan perlindungan DDoS, server VPS VDS | ProHoster