restructuring name hiding around the notion of hijacking

Michel Fortin michel.fortin at michelf.com
Thu Oct 1 18:39:05 PDT 2009


On 2009-10-01 12:29:39 -0400, Andrei Alexandrescu 
<SeeWebsiteForEmail at erdani.org> said:

>> I think it's a good idea, but there should be a way to *override* 
>> static functions.
> 
> That has the same risks. The problem right now is that in order to use 
> a class, you must absorb the definition of that class and that of each 
> superclass of it, all the way up to Object. With hijacking thwarted, 
> you can specify stuff in the base class that you can be sure will 
> continue to work the same in derived classes. I believe this makes 
> using classes quite a lot easier and safer.

But it breaks one pattern of mine. In the D/Objective-C bridge I have a 
few static functions and variables that must be redefined for each 
subclass defining an Objective-C interface. With your proposal I'd have 
to give them a different name for each subclass.

For instance, the "objcClass" function in:

	NSObject.objcClass

will give you a pointer to the Objective-C class NSObject, while in:

	NSString.objcClass

it will give you a pointer to the Objective-C class NSString, because 
objcClass has been reimplemented in the D version of the NSString class 
even though it derives from NSObject which has its own.

If you can't override a static function, how do you implement this?

I'd suggest that a static function could be made final which would 
remove the possibility of redefining it in a subclass. But in abscence 
of "final", you should still be able to "override" a static function in 
a subclass (perhaps the override keyword should be required).

-- 
Michel Fortin
michel.fortin at michelf.com
http://michelf.com/




More information about the Digitalmars-d mailing list