digitalmars.D.learn - toUTFz again
- Andrej Mitrovic (42/42) Mar 13 2012 I've completely lost track of what happened with the whole toUTF16z
I've completely lost track of what happened with the whole toUTF16z
story, but anyway since it's in std.utf why doesn't it just forward to
toUTFz?
const(wchar)* toUTF16z(T)(T input)
if (isSomeString!T)
{
return toUTFz!(const(wchar)*)(input);
}
That way it can take any string argument and not just a UTF8 string.
Currently it only accepts UTF8 which is an unnecessary restriction.
Secondly, it's difficult to make an alias to 'toUTFz'. For example, if
you want a short version of 'toUTFz!(char*)' in your code, you would
typically write an alias like this:
alias toUTFz!(char*) toCharPtr;
However that won't work because toUTFz requires a second type
argument. If toUTFz was a template that forwarded to other
implementation templates it would make the above alias possible.
Here's what I mean:
// equivalent to one of toUTFz templates in std.utf
auto toUTFzImpl(P, S)(S s) { return null; }
template toUTFz(P)
{
P toUTFz(S)(S str)
{
return toUTFzImpl!(P)(str);
}
}
void main()
{
alias toUTFz!(char*) toUTF8z;
toUTF8z("foo");
toUTF8z("foo"w);
toUTF8z("foo"d);
}
That's much simpler than having to declare every possible combination
just to use a simple alias:
alias toUTFz!(const(char*), char[]) toUTF8z;
alias toUTFz!(const(char*), wchar[]) toUTF8z;
alias toUTFz!(const(char*), dchar[]) toUTF8z;
alias toUTFz!(const(char*), string) toUTF8z;
alias toUTFz!(const(char*), wstring) toUTF8z;
alias toUTFz!(const(char*), dstring) toUTF8z;
Mar 13 2012








Andrej Mitrovic <andrej.mitrovich gmail.com>