Recursive typedef

Thu Oct 5 09:18:36 PDT 2006

Markus Dangl wrote:
> Hello,
> I'm trying to write a function like that:
> typedef ParseFn function(char[] s) ParseFn;
> i.E. a function that returns a pointer to a new function of equal type. 
> DMD gives me the error "circular reference of typedef ParseFn". Of 
> course i could be using a "void *" as return type, but there must be a 
> better (typesafe) way... Has anyone tried this before?

yes, just last night (and a few months back)

Going by way of void* is what I did for a function

IIRC this works

=typedef void* function() State;
=State foo() { return cast(State)&foo; }

delegate are a bit worse

=struct state { state delegate() use; }
=struct sam
=	state bar()
=	{
=		state ret;
=		ret.use = &;
=		return ret;
=	}

But it does make for a cool state machine!!!

State at = &seed;
while(null !is at) at = cast(State)at();


state at = &seed;
while(null !is at.use) at = cast(state)at.use();

More information about the Digitalmars-d-learn mailing list