Template docs

Josh Stern josh_usenet at phadd.net
Wed Oct 11 10:41:06 PDT 2006


On Wed, 11 Oct 2006 18:47:18 +0200, rm wrote:


> in your 2 examples I see 1 big difference,
> in the first example you templatize (is it a word?) part of the
> declaration of the class.
> in the second example the whole class is templatized.

I noticed that the original example in the docs compiled okay (with
suitable foo nonsense filled in) and then played around with trying to use
it in different ways.   Below is an example that is just like the one in
the docs (except for identifier names).  It compiles and runs.   I'm
basically just trying to understand if  the docs are just completely wrong
or if there is some subtle point about limitation that I'm missing even if
the description of it needs improving (see note below).

******************************************

import std.stdio;


class BadFoo {


  template TBar(T)
    {
	T xx;			// Error???
	int tfunc(T t) { return t.sizeof; }	// Error???
    }



  this() { 

    d_int = TBar!(int).tfunc(5);
    TBar!(int).xx = 7;

  }

  int val() { return TBar!(int).xx*d_int; }

  int  d_int;


}


class Norm {

  int x;
  int y;
}

void main() {



  BadFoo bf = new BadFoo;
  

  writefln(bf.val());
  writefln(BadFoo.sizeof);
  writefln(Norm.sizeof);
} 
**********************************************************

Output of the above is "28\n4\n4\n"   I was surprised by the 4's.
Are they both correct?   That seems like the size of the pointer 
to the class rather than the class itself, or am I missing something?





More information about the Digitalmars-d-learn mailing list