Cumulative

Steve Teale steve.teale at britseyeview.com
Wed Apr 2 11:14:44 PDT 2014


On Wednesday, 2 April 2014 at 14:23:57 UTC, Ola Fosheim Grøstad 
wrote:
> On Monday, 24 February 2014 at 08:41:06 UTC, Steve Teale wrote:
>> >
> Yes. This is "inner virtual functions" as opposed to "outer 
> virtual functions" (C++). The successor to Simula, BETA 
> (http://daimi.au.dk/~beta/), has this. Simula has this in the 
> constructor of a class (which syntactically is the body), but 
> BETA has the concept everywhere:
>
> somefunction:<(#
>   statements1;
>   inner;
>   statements2;
> #)
>
> When you specialize a function/class the extra stuff you add is 
> replacing the "inner" statement (and can provide it's own 
> "inner").
>
I had gone some distance along that course. A virtual function to 
handle events examined the event to see if it could deal with it. 
If it could not, it called a 'specificHandler' virtual function. 
But that approach only works if you have a hierarchy of known 
depth, when specificHandler only gets called for the leaf classes.

Later, I have had the constructors of derived classes add a 
handler delegate to a list of potential handlers maintained in 
the base class. The actual handler in the base class is a final 
method that simply iterates that list until some derived class 
handles the event, or throws if none do.

But both of these approaches are clumsy compared to what I would 
like to see.

It would help if D had 'direct' class methods (as opposed to 
final or virtual), as then I think it would be more 
straightforward to generate the delegate list.

I'm pleased to see though that some other languages have noted 
this deficiency.

Steve



More information about the Digitalmars-d mailing list