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