need clarification: will typedef, C struct initialization, etc.

Lionello Lunesu lio at lunesu.remove.com
Tue Jun 1 07:05:50 PDT 2010


On 1-6-2010 11:37, Andrei Alexandrescu wrote:
> On 05/31/2010 10:07 PM, Simen kjaeraas wrote:
>> Lionello Lunesu <lio at lunesu.remove.com> wrote:
>>
>>> I also miss typedef. I thought D had a great opportunity to fix it.
>>>
>>> Take something like the Windows headers. It mostly consists of typedefs
>>> for handles and whatnot. Without typedef you'd have to use alias and
>>> type safety is out of the windows.
>>>
>>> So what would be the way to translate those Windows headers? Create a
>>> unique struct for each old typedef? With alias this, and a ctor? Well,
>>> if that's the way to do it now, why not make typedef a shortcut for
>>> exactly that!?
>>>
>>> IIRC typedef is gone because you and Walter could not agree whether it
>>> had to be a subtype or a supertype of the typedef'ed type. For me it's
>>> rather simple: I want to introduce a new type in such a way that it
>>> helps me prevent mistakes, ie. passing one handle when the function
>>> wants another, even though both are based on void*, or whatever.
>>>
>>> Bring typedef back!
>>
>> struct Typedef( T ) {
>> T payload;
>> alias payload this;
>> }
>>
>> alias Typedef!int myInt;
>>
>> There you go.
> 
> Yah, perfect - that would be the subtype. I think we should work on
> adding a pseudo-supertype as well, and also on a completely independent
> type. Then we can add these abstractions to std.typecons.
> 
> Andrei
> 

Super/sub is of minor importance. What's important is that siblings are
incompatible. That's impossible now with alias and Simen's TypeDef
doesn't solve it either. Typedef was the perfect candidate for it. That,
and the custom .init! :o)

L.


More information about the Digitalmars-d mailing list