struct init property

Jonathan M Davis jmdavisProg at gmx.com
Thu Aug 23 13:53:37 PDT 2012


On Thursday, August 23, 2012 21:33:57 Namespace wrote:
> But to write your own init property would still be nice, or not?

How would it be different from defining a default constructor? Structs 
specifically _don't_ have default constructors, because init must be known at 
compile time, and all kinds of restrictions would have to be placed on a 
default constructor (enough to make it pointless) to ensure that it would work 
as an init value that there's really no point to it. The kind of stuff that 
you'd want to do in a default constructor but can't do by directly 
initializing the member variables is precisely the kind of stuff that you 
_can't_ do with a struct, because init must be known at compile time, must 
always generate the same result, couldn't throw exceptions, etc.

So, sure, at times it would be great to have a default constructor for 
structs, but other design decisions in the language (particularly with regards 
to init) simply make that infeasible. It's one of those "forced faults" in 
language design that Andrei likes to talk about.

So, what we get is an init value defined by how the member variables are 
directly initialized and the ability to define a static opCall to get you the 
equivalent of the default constructor in cases where S() is used rather than 
S.init. It's not perfect, but there's not much that we can do about it.

- Jonathan M Davis


More information about the Digitalmars-d-learn mailing list