Bill Baxter wrote:
> On Fri, Aug 21, 2009 at 10:36 AM, div0<d...@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.

Reply via email to