Bypassing the postblit?
monarch_dodra
monarchdodra at gmail.com
Mon Dec 30 14:34:30 PST 2013
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.
More information about the Digitalmars-d
mailing list