clone method of Object

Qian Xu quian.xu at stud.tu-ilmenau.de
Wed Apr 15 08:34:37 PDT 2009


grauzone wrote:

> ...
> cloned = clone(yourobject);

Hi again.

There are two things on my side:
1. Compiler refuses to clone private attributes. I have tried
gdc/gdmd/dmd_v1 in Linux.

2. I have implemented an example. But some part not implemented.

----------------- code -----------------------
T clone(T)(T oldobj)
{
  auto newobj = new T();
  if (oldobj is null)
  {
    return newobj;
  }

  foreach (int i, _; oldobj.tupleof)
  {
    auto elem = oldobj.tupleof[i];
    static if (is(typeof(elem): char[]*))
    {/*
      if (elem !is null)
      {
        char[] tmp;
        tmp = (*elem).dup;
        newobj.tupleof[i] = &tmp;
      }
      else {
        newobj.tupleof[i] = null;
      }*/
      NotImplemented_PleaseHelpMe;
    }
    else static if (is(typeof(elem) T2 : T2*))
    {
      if (elem !is null)
      {
        newobj.tupleof[i] = new T2;
       *newobj.tupleof[i] = *elem;
      }
      else {
        newobj.tupleof[i] = null;
      }
    }
    else static if (is(typeof(elem) == class))
    {
      if (elem !is null)
      {
        newobj.tupleof[i] = clone(elem);
      }
      else {
        newobj.tupleof[i] = null;
      }
    }
    else {
      newobj.tupleof[i] = elem;
    }
  }
  return newobj;
}
----------------- code -----------------------



More information about the Digitalmars-d-learn mailing list