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