Boost logo

Boost :

Subject: Re: [boost] [coroutine] interface suggestion
From: Oliver Kowalke (oliver.kowalke_at_[hidden])
Date: 2012-09-19 15:05:55


Am 19.09.2012 20:12, schrieb Vicente J. Botet Escriba:
> Le 19/09/12 14:23, Oliver Kowalke a écrit :
>> I forgot a suggestion made by Vicente:
>>
>> 5.a coroutine<>::caller_t provides function bind() which must be called
>> after coroutine::caller_t::yield() returned in order to get the
>> parameters
>>
>> int f( caller_t & c, strg & s, int x) {
>> c.yield( 7); // alternative c( 7)
>> c.bind( s, x); // s and x will contain new values given by
>> caller
>> }
> My suggestion was to call bind just once at the beginning of function
> and before any call to yield.
> If you want to ensure that the bind has been done, you could request
> that yield is provided by the result of the bind operation, as e.g.
>
> int f( caller_t & c, strg & s, int x) {
> auto b = c.bind( s, x); // s and x are now used to store the
> next calls.
> b.yield( 7); // alternative b( 7)
> // here s and x have been reassigned
> }
OK - what if a user forgets to bind ? Maybe we can force the user to bind:

int f( caller_t & c, strg & s, int x) {
        caller_t::yield_t b = c.bind( s, x); // s and x are now used to
store the next calls.
        b.yield( 7); // alternative b( 7)
        // here s and x have been reassigned
  }

c.bind() retrieves the addresses of the parameters used to store the
values (for each entering of f).
only yield_t will provide yield() function.

what do you think?

Oliver


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk