Usability of "allMembers and derivedMembers traits now only return visible symbols"

Basile B. via Digitalmars-d digitalmars-d at puremagic.com
Sat Sep 3 10:23:53 PDT 2016


On Saturday, 3 September 2016 at 16:52:50 UTC, Martin Nowak wrote:
> On Tuesday, 30 August 2016 at 22:24:12 UTC, Ali Çehreli wrote:
>> I don't agree with the current solution:
>
> Well let's come up with a better solution then.
> Let's start by finding some proper use-cases that require 
> introspection on private members w/o having access to them.

In my user library, the serialization is based on the @Set and 
@Get UDAs. Typically there would be a setter (a public method) 
and no getter (i.e the data is read directly either from a 
protected or private variable).

The introspection is used to create a property descriptor. But 
because of the protection attributes I have to mix the 
introspection features (== a template) in each aggregate that 
declares properties and in each descendant class that declare new 
properties.



Class Foo
{
     mixin features f; // so that the private stuff are visible

private:
     @Get int _field;
public
     @Set void field(int value){}

     this()
     {f.analyze!Foo;}
}

class Bar: Foo
{
     mixin features f; // so that the private stuff are visible

private:
     @Get int _otherfield;
public
     @Set void otherfield(int value){}

     this()
     {f.analyze!Bar;}
}



while I could do, with the omniscient traits:



Class Foo
{
private:
     @Get int _field;
public
     @Set void field(int value){}

     this(this T)()
     {
         features.analyze!T;
     }
}

Class Bar: Foo
{
private:
     @Get int _otherfield;
public
     @Set void otherfield(int value){}
}

no need to re-mix the features for each derived class...





More information about the Digitalmars-d mailing list