On Sunday, 4 September 2016 at 08:42:43 UTC, Martin Nowak wrote:
On Sunday, 4 September 2016 at 07:24:42 UTC, Basile B. wrote:
The introspection creates a special structure for each
property annotated with @Set, @Get, or @SetGet. This is a kind
of interface for serialization/binding/object inspector (a bit
like "published" in Object Pascal).
But you can't access private fields outside of the current
module, so you need to mixin sth. to set/get the value anyhow.
But that's the point ! We are many willing to see this
restriction removed for the traits because they are special., i.e
they should allow to implement, using meta programming, features
that less powerful languages do in intern. That's also why I
propose to add a 3rd optional bool parameter to the allMembers
trait:
enum RespectProtection = false;
enum IgnoreProtection = true;
__traits(allMembers, T, RespectProtection)
__traits(allMembers, T, IgnoreProtection)
The 3rd optional parameter, when not specified, would be set a
default value of false (equivalent to __traits(allMembers, T,
RespectProtection), to prevent breakage.
Because allMembers would act as a filter for getMember,
getOverload...the protection check in getMember, getOverload...
would be removed.
This will be obviously more complex than that but that's the idea.