Getting module of a class

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Sat Oct 18 09:52:38 PDT 2008


Sergey Gromov wrote:
> Sat, 18 Oct 2008 05:58:50 +0900,
> Bill Baxter wrote:
>> The truly simplest solution here is just to ignore Scott Meyer's
>> advice and make nonMemberFunction a static member function.  That way
>> if I have access to SomeClass I will always have easy access to
>> nonMemberFunction, regardless of whatever round-about chain of imports
>> and aliases got me SomeClass.
> 
> To define a non-member, *non-friend* function in D you must define it in 
> a different module than the module in which your class is defined.  Good-
> bye encapsulation.  :)

I agree. I'd also agree that file-level encapsulation does make sense. 
After all, unless fancy code databases are used, the file is the 
physical unit of protection and change tracking, and it's here to stay. 
So I don't find one scheme inferior to the other.

A possible improvement would be to introduce "module" as a protection level:

class A
{
public:
    void fun(); // vale tudo
module:
    void gun(); // what private is now
protected:
    void hun(); // zis and derivees
package:
    void iun(); // package-level
private:
    void jun(); // really, really private. I mean it.
}

I'm not sure how much this improve the state of affairs. I guess it's 
one of those reddit-ish "Vote up if you want to attract Walter's 
attention..."


Andrei



More information about the Digitalmars-d mailing list