Template classes

Arild Boes aboesx at gmail.com
Thu Apr 16 10:14:51 PDT 2009


Jarrett Billingsley skrev:
> On Wed, Apr 15, 2009 at 12:13 PM, Arild Boes <aboesx at gmail.com> wrote:
> 
>>> Take a look at the 'this' of D2, it allows to create wrapper structs, so
>>> you can just add methods to the built-in arrays.
>>>
>>> Bye,
>>> bearophile
>> Please elaborate on this. How does one do that?
> 
> With the new, delicious "alias this."
> 
> struct Array(T)
> {
> 	T[] blah;
> 	alias blah this; // woo!
> 	
> 	void print()
> 	{
> 		writefln(blah);
> 	}
> }
> 
> void main()
> {
> 	Array!(int) x;
> // anything not defined in Array will instead be looked up in the
> 'alias this' member
> 	x.length = 5;
> 	x[2] = 3;
> 	x.print();
> }
> 
> Though actually I'm not sure why bearophile suggested this, since even
> in D1, you can define 'extension' methods for arrays and AAs by simply
> declaring a function that takes an array or AA as its first parameter.
>  It's syntactic sugar for a normal function call.  By taking advantage
> of templates and IFTI you can make these methods work for all kinds of
> arrays.
> 
> void print(T)(T[] arr)
> {
> 	writefln(arr);
> }
> 
> void main()
> {
> 	int[] x;
> 	x.length = 5;
> 	x[2] = 3;
> 	x.print(); // same as print(x);
> }
> 
> This will work in D1 or D2.

I see. Thank you very much for that answer.
Actually the f-call syntactic sugar seems like a good way to keep core 
classes of any library very lean and mean, whilst maintaining the 
ability to expand the module without re-compiling the original library! 
(just import this guy, and the new functions will be available to you as 
if declared in the original type).


More information about the Digitalmars-d-learn mailing list