Passing Appender by value

monarch_dodra monarchdodra at gmail.com
Sat Jun 22 08:16:38 PDT 2013


On Saturday, 22 June 2013 at 13:48:53 UTC, Andrej Mitrovic wrote:
> On 6/22/13, Andrej Mitrovic <andrej.mitrovich at gmail.com> wrote:
>>     Appender!(int[]) buffer;
>>     call(buffer);
>>     writeln(buffer.data);  // writes [], it's empty
>
> Apparently it's the same thing as the old AA problem. 
> Essentially the
> buffer would have to be initialized first by appending:

Yeah... same old, same old.

I think you can work around the problem using "appender":
auto buffer = appender!(int[])();

This is off memory, so not 100% guaranteed, but I remember this 
worked for me last time *I* ran into this problem.

Indeed, this is a recurring problem in D with non-initialized 
reference types, AA's, Appender, Containers...

The fact there is no standardized way to make a call for run-time 
intialization with no arguments doesn't help either. I had made a 
request for having an explicit runtime constructor that takes no 
arguments:
http://forum.dlang.org/thread/bvuquzwfykiytdwsqkky@forum.dlang.org
Didn't really get anywhere though...

In any case, I think this is a ***HUGE*** problem for D (my N°1 
problem anyways). static opCall() kind of helps, but it's not 
quite a constructor...

I think we're kind of doomed to keep this issue around 
unresolved, biting users in the ass *everyday*, for still quite 
some time :(


More information about the Digitalmars-d-learn mailing list