Prevent default-initialised struct

Christopher Wright dhasenan at gmail.com
Wed Jan 28 15:45:03 PST 2009


Daniel Keep wrote:
> Hi all,
> 
> is there any way to prevent a struct from being created directly?
> Basically, I want to prevent this:
> 
> {
>   non_null!(T) a;
> }
> 
> I want people to have to use provided functions to create a structure:
> 
> {
>   auto a = non_null!(T)(new T);
> }
> 
>   -- Daniel

struct non_null(T : class)
{
	// this should be private, but no can do
	// an alternative is to obscure _member somehow,
	// say, as a void*, just to make sure that nobody
	// uses it without it being obvious that they're doing
	// something bad
	T _member;

	T opDot ()
	{
		if (_member is null) _member = new T;
		return T;
	}
	
	non_null!(T) opAssign(T value)
	{
		demand (value !is null);
		_member = value;
	}
}


More information about the Digitalmars-d-learn mailing list