Am 05.10.2012 20:10, schrieb Nat Linden:
On Fri, Oct 5, 2012 at 11:22 AM, Oliver Kowalke
wrote: Version 1) requires that coroutine-fn has only one argument == coroutine<>::self_t. Other arguments are accessed via coroutine<>::self_t::get< int >() and results via coroutine<>::get(). interface provides input/output iterators. I'm not sure this is an improvement over having yield() return a tuple. yield() returns a reference to coroutine<>::self_t. I decided to remove the parameters from the coroutine-fn signature and let the user access them via self_t::get< N >(). Then it should be clearer when and where the values are updated/available after a yield/resume cycle.
Version 2) requires that coroutine-fn has only one argument too == coroutine<> with inverted signature. The signature inversion thing makes me uneasy. Although I don't yet have a definite case in mind, I worry that would make it difficult to synthesize a coroutine as a helper object in generic code that needs to deal with arbitrary signatures.
coroutine<>::caller_t is a typedef of the coroutine type expected/passed to coroutine-fn. typedef coroutine< int( int, int> > coro_t; int fn( coro_t::caller_t & c) { int x = c.get().get< 0 >(); int y = c.get().get< 1 >(); c( x +y); ... } coro_t coro( fn); int res = c( 3, 7).get(); regards, Oliver