www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - Re: Feature request: clone a class (similar to typedef)

reply Michael Kiermaier <michael.kiermaier gmx.net> writes:
I have run several times into this situation (that I want a duplicate of a
class).

I like the proposal, in my opinion it would feel quite natural to have a third
keyword besides alias and typedef.
One is for aliasing a class (alias), one for duplicating the class type without
the internals (typedef), and one for full duplicating (clone ore something
different).

Greetings,

~michael

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

Sep 22 2007
parent Bill Baxter <dnewsgroup billbaxter.com> writes:
Michael Kiermaier wrote:
 I have run several times into this situation (that I want a duplicate of a
class).
 
 I like the proposal, in my opinion it would feel quite natural to have a third
keyword besides alias and typedef.
 One is for aliasing a class (alias), one for duplicating the class type
without the internals (typedef), and one for full duplicating (clone ore
something different).

You don't add keywords for things that have only come up "several times". If you're not going to use it just about every time you touch your keyboard, then it shouldn't be a keyword. --bb
Sep 22 2007