Feature request: clone a class (similar to typedef)

Bruno Medeiros brunodomedeiros+spam at com.gmail
Fri Sep 21 18:06:12 PDT 2007


coxalan wrote:
> Hello!
> 
> There are situations where you want an exact clone of a class, including two separated sets of static class members.
> 
> A first try using typedef:
> 
> import std.stdio;
> 
> class foo {
>     static uint a;
> }
> 
> typedef foo foo1;
> typedef foo foo2;
> 
> void main() {
>     foo1.a = 1;
>     foo2.a = 2;
>     writefln(foo1.a);
>     writefln(foo2.a);
> }
> 
> gives the output
> 2
> 2
> 
> So typedef gives new types foo1 and foo2, but they share the same static class members.
> 
> 
> A version which distinguishes the two copies by a template id:
> 
> import std.stdio;
> 
> class foo(uint id) {
>     static uint a;
> }
> 
> 
> void main() {
>     foo!(1).a = 1;
>     foo!(2).a = 2;
>     writefln(foo!(1).a);
>     writefln(foo!(2).a);
> }
> 
> gives the output
> 1
> 2
> 
> 
> So basically this works.
> But the problem is, that the code of the class needs to be extended by a id template variable.
> 
> 
> I wonder if it would make sense to introduce a new keyword, say 'clone', which works like 'typedef', but additionally gives a new set of static class members.
> 
> coxalan

One alternative is to put the class's body into a template and then use 
template mixins to create several "clones":

template Foo_body() {
   static uint a;
   int b;
   void someMethod() {}
}

class Foo1 { mixin Foo_body!(); }

class Foo2 { mixin Foo_body!(); }

-- 
Bruno Medeiros - MSc in CS/E student
http://www.prowiki.org/wiki4d/wiki.cgi?BrunoMedeiros#D



More information about the Digitalmars-d mailing list