convert "class of" in pascal to D.

rumbu rumbu at rumbu.ro
Wed Jan 30 11:44:15 PST 2013


On Wednesday, 30 January 2013 at 16:16:49 UTC, Eko Wahyudin wrote:
> thanks all,
>
> I think i am understand, if the closest solution is template,
> there is no solution in D for my code like this.
>
> type
>       TMyObjectClass = class of TMyObjectA;
>
> var
>       ClassArray : array of TMyObjectClass; //the content
> initialized
> randomly
>       ObjectArray : array of TMyObjectA;
>       i, j : Integer;
>
> procedure CreateAllObject;
> begin
>       J:= length(ClassArray);
>       for I:= 0 to J do begin
>         ObjectArray[I]:= ClassArray[I].Create({some argument});
>       end;
> end;
>
> if D unable to do this, I think we must do something with D.
>
> I'm still thinking, why constructor in D adopt C++ style rather
> than pascal style, while pascal style is better :-?


The only problem for translating your code is the parameterized 
constructor. Otherwise, your code will look in D like this an no 
template is involved:

TypeInfo_Class[] ClassArray;
TMyObjectA[] ObjectArray;

void CreateAllObject()
{
     foreach(int i = 0; i < ClassArray.length; i++)
        ObjectArray[i] = ClassArray[i].create();
}

Anyway, you can transform your constructor parameter in a field 
or property and set it in the for statement for each new object.


More information about the Digitalmars-d mailing list