August 23, 2009
Bill Baxter wrote:
> On Fri, Aug 21, 2009 at 10:36 AM, div0<div0@users.sourceforge.net> wrote:
>> -----BEGIN PGP SIGNED MESSAGE-----
>> Hash: SHA1
>>
>> Not sure what the original choice was based on, but what you suggest looks wrong to me. You aren't necessarily using a template in order to mix it in somewhere.
>>
>> With that syntax it looks like you can only use foo as a mixin. If you change 'mixin' to 'paste' your way round looks even more wrong.
> 
> At least for templates that are just a bunch of alias declarations, it can be handy to be able to use directly or to mix in.  So there would be little to be gained by forcing the developer to choose "mixin" or "regular template" up front.
> 
> For example
> 
> template MeshTypes(MeshType) {
>    alias MeshType mesh_type
>    alias typeof(MeshType.vertices[0]) vert_type;
>    alias typeof(MeshType.vertices[0].x)  float_type;
>    const uint vert_dim = vert_type.length;
> }
> 
> That's handy to use inline like   MeshTypes!(MyMesh).vert_type
> Or you can mix it in to another class that uses mesh a lot to have all
> those types defined inside your class too.
> 
> --bb

Alright, good example.

But then why not:

	mixin MeshTypes(MeshType) {
	    alias MeshType mesh_type
	    alias typeof(MeshType.vertices[0]) vert_type;
	    alias typeof(MeshType.vertices[0].x)  float_type;
	    const uint vert_dim = vert_type.length;
	}

	template MeshTypesOf(MeshType) {
	    mixin MeshTypes!(MeshType);
	}

Admittedly it is not as clean and violates DRY some.  But it does allow the declarer to explicitly determine how the template/mixin gets used.

Eh, I was kinda hoping for a reason better than "there are some cases where you want both a mixin and a template to be the same thing."  I thought it might be something obvious to someone; something that I missed.  Nonetheless, the template/mixin duality seems fairly benign, so this decision is starting to look somewhat arbitrary to me.
1 2
Next ›   Last »