On 2012-08-02 09:43, Jonathan M Davis wrote:
For instance, I have this function which I use to generate a mixin any time
that I want to get the first code unit:
string declareFirst(R)()
if(isForwardRange!R && is(Unqual!(ElementType!R) == dchar))
{
static if(isNarrowString!R)
return "Unqual!(ElementEncodingType!R) first = range[0];";
else
return "dchar first = range.front;";
}
So, every line using it becomes
mixin(declareFirst!R());
which really isn't any worse than
char c = str[0];
except that it works with more than just strings. Yes, it's more effort to get
the lexer working with all ranges of dchar, but I don't think that it's all
that much worse, it the result is much more flexible.
That doesn't look too bad. I'm quite happy :)
--
/Jacob Carlborg