On Monday, 30 December 2013 at 16:18:22 UTC, Maxim Fomin wrote:
On Sunday, 29 December 2013 at 19:26:09 UTC, monarch_dodra wrote:
Nope. What you are asking for is basically a default constructor, which D does not provide. Workarounds include the "static opCall" pattern, as well as the "function builder" pattern (eg: "MyStruct myStruct(Args args)")

Actually it does provide, but does not allow to override it. When you define postblit, dmd generates default constructor like this:

struct S
{
   int data[];
   this(this) { data = data.dup; }
   void __cpctor(const ref S s) const
   {
      this = s;
      s.__postblit();
   }
}

The only way to override it is currently is to make your function, drop original symbol from binary file and link the program. I think it could work like opAssign - provide default version but allow to place yours. In such case it would be possible to alter original struct object but it would lead to conflict if original object is const or immutable qualified.

Hum... The original question was "Any possibility of *preblit* kind functionality?". I meant "default constructor" in the C++ sense: A constructor that gets called with no arguments. That does not exist in D.

I did not know dmd generated an actual symbol for CC though. Interesting to know.

Reply via email to