Class knowing its own Class

Justin Spahr-Summers Justin.SpahrSummers at gmail.com
Wed Jun 30 21:55:33 PDT 2010


On Wed, 30 Jun 2010 22:59:50 +0200, Tomek Sowinski <just at ask.me> wrote:
> 
> Dnia 30-06-2010 o 00:13:28 strtr <strtr at sp.am> napisal(a):
> 
> > == Quote from Steven Schveighoffer (schveiguy at yahoo.com)'s article
> >> On Tue, 29 Jun 2010 17:59:37 -0400, strtr <strtr at sp.am> wrote:
> >> > What is the pretty way to do something like this?
> >> >
> >> > Class C
> >> > {
> >> >   void makeNew()
> >> >   {
> >> >     new typeof(this);
> >> >   }
> >> > }
> >> As edited...
> >> -Steve
> >
> > Whahaha!
> > Thanks, I knew I was missing something here.
> 
> Interestingly, this works even if makeNew is static (as factory methods
> usually are). Don't know whether by design or by bug. If by the latter,
> please don't fix it ;)
> 
> 
> Tomek

Yep, it's intentional. It's explained in a rather hard-to-find spot:

"There are three special cases:

 1. typeof(this) will generate the type of what this would be in a non-
static member function, even if not in a member function.
 2. Analogously, typeof(super) will generate the type of what super 
would be in a non-static member function.
 3. typeof(return) will, when inside a function scope, give the return 
type of that function."

http://www.digitalmars.com/d/2.0/declaration.html#Typeof


More information about the Digitalmars-d-learn mailing list