On Wed, 01 Jun 2011 20:47:16 -0400, Walter Bright <newshou...@digitalmars.com> wrote:
[5] Have Your Efficiency, and Flexibility Too by Nick SAbalausky
http://www.semitwist.com/articles/EfficientAndFlexible/SinglePage/

Overall, I thought it thorough, and enjoyable read, if a little too cute for its own good in a couple of places. Just a couple of comments:

* Here's a shorter, cleaner alternative to isIGizmo from ex5_meta_deadDuck1.d:

template isIGizmo(T)
{
    immutable bool isIGizmo = is(T : Gizmo!(T.numPorts, T.isSpinnable));
}

* static asserts in their current incarnation (well, as of 2.052, I haven't double checked 2.053) are broken and should be verboten. This is because they halt compilation, instead of generating an _error statement, whenever they are evaluated. So when evaluated in traits, template constraints, etc. anything with a static assert doesn't compose. As an alternative, putting a string by itself on a line produces just as good an error message and composes with the rest of D. (It might also be a cross language technique.) See http://d.puremagic.com/issues/show_bug.cgi?id=5233 for an example.

* I think there's a minor error in ex5_meta_deadDuck2.d:
is`~interfaceName~`!(`~thisType~`), => is(`~interfaceName~`!(`~thisType~`)),

Also, inside a template you can use the template name to refer to itself. So you could change "string thisType" to "T" and then use T.stringof and mixin(declareInterface("IGizmo", Gizmo)); instead.

Reply via email to