170 похожих чатов

Добрый вечер. Кто-нибудь пытался на новых корутинах повторить питоновые генераторы?

co_yield я ещё как-то освоил, интересует возможность илдить что-то с аргументом, полученным через co_await.
иными словами - повторить вот этот питоновый код:
>>> def double_inputs():
... while True:
... x = yield
... yield x * 2
...
>>> gen = double_inputs()
>>> next(gen) # run up to the first yield
>>> gen.send(10) # goes into 'x' variable
20

21 ответов

6 просмотров

https://github.com/lewissbaker/cppcoro

0xBytearray- Автор вопроса
Danya🔥
https://github.com/lewissbaker/cppcoro

видел, но там в async_generator<T> не вполне понятно как что-то слать. показан пример с ожиданием таймера, но это не "принятие аргумента". это потом никак в co_yield не использовать. надо бы что-то вида int i = co_await something; co_yield object(i)

0xBytearray
видел, но там в async_generator<T> не вполне понят...

В примере с питона у тебя нет авэйта

0xBytearray- Автор вопроса
0xBytearray- Автор вопроса
Kirill Bolshakov
Ну, это co_yield

co_yield это на выход из генератора. мне нужен вход

0xBytearray- Автор вопроса
Kirill Bolshakov
Вход в генерато это вызов функции

вот нужна возможность что-то периодически передавать в один и тот же генератор. через awaitable, я так понял

0xBytearray
co_yield это на выход из генератора. мне нужен вхо...

На сколько я понимаю в такой задаче входом будет другой генератор. Для него нужно будет реализовать "концепт" awaitable (на самом деле такого концепта нет, но мне удобнее это так называть). С ходу я не скажу, может в cppcoro генератор уже реализует awaitable и тогда можно все готовое использовать.

0xBytearray- Автор вопроса
magras
На сколько я понимаю в такой задаче входом будет д...

я не против awaitable, знать бы только как из него достать какую-либо передаваемую в генератор переменную

0xBytearray
я не против awaitable, знать бы только как из него...

Очень приблизительно так: class Source { struct promise_type { int value; int yield_value() { return value; } ... }; coroutine_handle m_coro; public: void push(int v) { m_coro.promise().value = v; } }; Скорее всего для того чтобы реализовать awaitable понадобится еще continuation хранить в promise. upd: Код принципиально неправильный и сама идея реализовывать здесь корутину не верна.

magras
Очень приблизительно так: class Source { struct ...

Хотя я туплю. Кажется здесь сама корутина не нужна. Можно просто awaitable реализовать.

magras
Хотя я туплю. Кажется здесь сама корутина не нужна...

Кажется здесь уже без экзекютера не обойтись. Если я правильно понимаю, такой источник данных должен при suspend'е должен сохранить continuation. В методе push он долен зашедулить исполнение в экзекютере. В простейшем случае думаю можно просто продолжить исполнение на текущем трэде. В общем я попробую набросать рабочий пример.

magras
Очень приблизительно так: class Source { struct ...

yield_value разве можно без аргументов? (ну и соответственно co_yield без expression?)

PRoSToC0der
yield_value разве можно без аргументов? (ну и соот...

Действительно нельзя. Да и возвращать yield_value() должен awaitable. Сейчас добавлю апдейт, что этот код - бред.

0xBytearray- Автор вопроса

Проблема решилась на stack overflow, спасибо доброму человеку https://gcc.godbolt.org/z/8aMjej

кажется у тебя баг в питонокоде

0xBytearray- Автор вопроса
0xBytearray
Проблема решилась на stack overflow, спасибо добро...

эх. Не успел. =( Единственное что я бы хранил значение снаружи в generator_input и передавал бы ссылку на него в лямбду при конструировании. Но это мелочи если считать это просто демострационным кодом.

Похожие вопросы

Обсуждают сегодня

Может кто встречал такое? Один набор данных, но в одном столбце кодировка нормальная, а в другом ироглифы. Как такое может быть?
Alexander
23
Всем привет. Подскажите, пожалуйста, почему не ищет русскую букву а? А английскую ищет. Полагаю что-то с кодировкой. Но как исправить это? procedure TfrmMain.btnOpenFileClic...
Евгений
7
И к какой архитектуре привязана Java?
Dmitry Olshansky
17
коллеги, добрый вечер! А никто не знает как модальная форма может себя закрыть? Ну допустим модальная форма определила, что смысла ей работать нет и хочет вернуть modalResult...
Михаил
83
@Aiwan что такое база образца?
Alexey
27
Не многие знают, а кто знает, тот уже успел забыть, что в далёком 2004 году эта игра произвела настоящий фурор, настолько революционной была технология, применяемая для её соз...
ICCID
4
Как это поможет если в архив положили папку?
Sasha Beep
8
Добрый день Хочу начать обучение языку, не являюсь представителем it, буду благодарна за помощь, совсем пока не понимаю ничего) Подскажите, пожалуйста, где можно начать первы...
Sara Lala
30
Хотя у меня сейчас есть более сложная задача, вот её думаю: как объяснить челу переходного возраста противоположного полу, обучающегося в польском колледже (а-ля наш техникум)...
Вячеслав Кузьменко
15
Короче я тут узнал полный пиздец Что кучу постов которые я создавал через posted Спустя время не могу редактировать и менять Мол телега возвращае ошибку Это реально так ...
inc.
13
Карта сайта