Поверхностное копирование объекта можно осуществить весьма хитроумным способом, который мы нашли в интернете (к сожалению, найдено было давно и мы не смогли установить точного автора, а ссылку потеряли):
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; } }
Этот шаблон является довольно интересной идеей, хотя задача поверхностного копирования объектов не так уж и распространена.