Is there an equivavlent to C# boxing in D?

H. S. Teoh hsteoh at quickfur.ath.cx
Sat Feb 12 00:41:22 UTC 2022


On Sat, Feb 12, 2022 at 12:27:34AM +0000, IGotD- via Digitalmars-d-learn wrote:
> If you want to store a value type on the heap in D you just use "new"
> and a pointer to the type. The same thing in C# would be to wrap the
> value type into an object. However when you do that automatic
> conversion without a cast seems not to be possible (C# also have a
> dynamic type that might solve that but more heavy weight).
> 
> https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/types/boxing-and-unboxing
> 
> Is there a possibility to wrap a value type in D around the base
> object class that is otherwise used as the class reference type? Would
> this be a way to use D without raw pointers for heap allocated value
> types?

How about this?

--------
final class Boxed(T) {
	T payload;
	alias payload this; // caveat: probably not a good idea in general
	this(T val) { payload = val; }
}

Boxed!int i = new Boxed!int(123);
int j = i; // hooray, implicit unboxing!
i = 321; // even this works
--------


T

-- 
Computers aren't intelligent; they only think they are.


More information about the Digitalmars-d-learn mailing list