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