Policy for exposing range structs
jmh530 via Digitalmars-d
digitalmars-d at puremagic.com
Thu Mar 31 07:34:13 PDT 2016
On Thursday, 31 March 2016 at 13:10:49 UTC, Steven Schveighoffer
wrote:
>
> I too like Voldemort types, but I actually found moving the
> types outside the functions quite straightforward. It's just
> annoying to have to repeat the template parameters. If you make
> them private, then you can simply avoid all the constraints.
> It's a bad leak of implementation, since now anything in the
> file has access to that type directly, but it's better than the
> issues with voldemort types.
>
If you move anything with a Voldemort type to their own modules,
then do what you say, then there is no longer an access issue.
Leads to a proliferation of modules.
I can think of another alternative, but it is probably a needless
complexity. Suppose there is a protection attribute with the
property that things in the module can only access it if given
permission explicitly. For instance, taking the D wiki Voldemort
type example and modifying it to your approach would give
struct TheUnnameable
{
int value;
this(int x) {value = x;}
int getValue() { return value; }
}
auto createVoldemortType(int value)
{
return TheUnnameable(value);
}
The Unnameable would then be changed to
explicit struct TheUnnameable
{
explicit(createVoldemortType);
int value;
this(int x) {value = x;}
int getValue() { return value; }
}
where explicit used as a protection attribute would restrict
TheUnnameable to only things where the explicit function gives
explicit permission.
More information about the Digitalmars-d
mailing list