Re[26]: Mногопоточность: C++ vs Erlang vs другие
От: Evgeny.Panasyuk Россия  
Дата: 13.06.15 11:23
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Вдогонку. Что насчет локальных переменных корутины? Где их хранить?


Так в этом же вся суть
Функция автоматически преобразовывается в класс-автомат, и её локальные переменные становятся полями класса.
Тоже самое например происходит в показанном ранее примере C# — обрати внимание на исходный код с await, на переменную result, и на поле <result>5__1 в сгенерированном коде

V>В примерах буста они хранятся в структуре-наследнике asio::coroutine.

V>А как будет выглядеть аналогичный объект с т.з. системы типов С++ в случае:
V>
V>iterator<T> generate() resumable {
V>  int tmp = 1;
V>  yield return rand()*tmp++;
V>  yield return rand()*tmp++;
V>};
V>

V>Где будет хранится локальная переменная tmp в твоём случае, т.е. когда iterator<> — это полностью value-type объект?

Она будет хранится внутри объекта-автомата, который будет хранится внутри самого итератора. Естественно тип итератора будет зависеть от типа класса-автомата.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.