Сонирхогчид C++ хэл дээр макро ашиглан хийгдсэн do тэмдэглэгээнд суурилсан генераторуудыг бичсэн байдаг. Энэхүү хэрэгжилт нь MIT лицензийн дагуу нээлттэй эх сурвалжтай. // Do тэмдэглэгээгүйгээр auto result = ::bind(mx, [&](auto&& x) { return ::bind(my, [&](auto&& y) { return make_value(x + y); }); }); // Do тэмдэглэгээтэй auto result = DO( LET x IS(mx); LET y IS(my); return make_value(x + y); );
Генератортой жишээ код: // Үнэгүй хуваарилалт генераторууд constexpr auto my_generator() { return GENERATOR((int i), (.i = 0), // or ГЕНЕРАТОР_ЦООС YIELD(42); WHILE(i != 10) ( YIELD(i); ++i; ) буцах төгсгөл (); ); } 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); // хэвлэх [42, 3, 4, 5, 6, 7, 8, 9] /* for (auto i : gen) { std::println("{}", i); } */ }
Генераторуудыг холболтын функц болон generator_continuation гэсэн үндсэн функцээр тодорхойлдог. Одоо холболт бүрийг бүгдийг нь нэг дор үнэлэхийн оронд залхуутайгаар гүйцэтгэдэг болсон. Код нь хоёр хувилбарыг өгдөг: нэг нь виртуал функцууд дээр суурилсан, нөгөө нь илүү сайн гүйцэтгэл авахын тулд Type Loopholes ашиглан std::variant-ийн аналог дээр суурилсан.
Эх сурвалж: opennet.ru
