Поверхностное копирование объекта можно осуществить весьма хитроумным способом, который мы нашли в интернете (к сожалению, найдено было давно и мы не смогли установить точного автора, а ссылку потеряли):
extern (C) Object _d_newclass(ClassInfo info);
// поверхностное копирование объекта
template shallow_copy (T : Object)
{
T shallow_copy (T value)
{
if (value is null)
return null;
void* copy = cast(void*) _d_newclass(value.classinfo);
size_t size = value.classinfo.init.length;
copy[0 .. size] = (cast(void*) value)[0 .. size];
return cast(T) copy;
}
}
Этот шаблон является довольно интересной идеей, хотя задача поверхностного копирования объектов не так уж и распространена.