bvs@light.uucp (Bakul Shah) (05/07/88)
The following is not exactly what was asked for but it is the only way
in C of defining self-type returning functions _without_ using casts.
struct state {
struct state (*next)(struct state);
};
Example use:
state_machine(struct state initstate)
{
struct state state = initstate;
while (state.next)
state = state.next(state);
}
The need for some extra syntactic sugar is unfortunate but (to my way of
thinking) preferable to use of ``casts'' or ``void (*)()''s. Of course,
in practice you rarely want to use a function that returns another
function of the same type.
--
Bakul Shah
..!{ucbvax,sun}!amdcad!light!bvseppstein@garfield.columbia.edu (David Eppstein) (05/12/88)
sjs@spectral.ctt.bellcore.com (Stan Switzer): > The lack of functions returning {functions returning}* can hardly be > considered a serious flaw in C, but such functions ARE useful. chris@mimsy.UUCP (Chris Torek): > Agreed. Traditionally, this has been done with ... [icky casts -- DE]. A cleaner approach is to wrap the function pointers in a recursive struct: struct foo; typedef foo (* foo_func)(); struct foo { foo_func fn_ptr; foo(foo_func f) { fn_ptr = f; } foo operator()() { return (*fn_ptr)(); } }; foo bar() { return bar; } -- David Eppstein eppstein@garfield.columbia.edu Columbia U. Computer Science