Rename std.string.toStringz?
Steven Schveighoffer
schveiguy at yahoo.com
Mon Jun 20 05:23:46 PDT 2011
On Sun, 19 Jun 2011 09:20:17 -0400, Andrei Alexandrescu
<SeeWebsiteForEmail at erdani.org> wrote:
> On 6/18/11 5:42 PM, Jonathan M Davis wrote:
>> On 2011-06-18 06:35, Andrei Alexandrescu wrote:
>>> On 6/18/11 4:59 AM, Jonathan M Davis wrote:
>>>> I'll look at renaming toUTF16z to toWStringz to match toStringz (as
>>>> was
>>>> suggested by a couple of people in this thread)
>>>
>>> That should be a template toUTFz that takes either char*, wchar*, or
>>> dchar*.
>>
>> A good point. Are you arguing that toStringz should be replaced by such
>> a
>> construct? Or that it should simply exist in addition to toStringz?
>> Also, we _could_ make it so that such a template would take the
>> mutabality of
>> the pointer as well (e.g. toUTF!(char*)(str), toUTF!(const(char)*),
>> etc.),
>> which would allow it to be used in cases where you actually want a
>> mutable
>> string (which toStringz doesn't do).
>>
>> - Jonathan M Davis
>
> I think that's a good idea, which would address that StackOverflow
> problem too.
>
> The way I'd probably suggest we go about it is as a universal
> transcoder. Define std.conv.to with strings of any width and
> qualification as input and with pointers to characters of any width as
> output. It is implied that the conversion entails adding a terminating
> zero.
>
> string a = "hello";
> auto p = to!(wchar*)(a); // change width and qualifier
I don't like relying on an implication is a zero character is added. A
char * pointer may or may not be zero terminated (that is one of the
issues with C), so you can't really designate a type to mean "zero
terminated".
The name (whatever it is) should indicate that a zero terminator is added.
Simply because someone could see:
string a = "hello";
auto p = to!(const(char)*)(a);
and think "hm.. what a waste! I'll just change that to a.ptr," not
realizing the harm he is doing (and this might actually pass unit tests
too!).
I like toUTFz. Along with aliases for toStringz, toWStringz, and
toDStringz.
-Steve
More information about the Digitalmars-d
mailing list