Template docs
rm
roel.mathys at gmail.com
Wed Oct 11 09:47:18 PDT 2006
Josh Stern wrote:
> The "Limitations" section of the language page on templates,
> http://www.digitalmars.com/d/template.html is confusing. In
> particular, the sentence and example "Templates cannot be used
> to add non-static members or functions to classes. For example:
>
> *************************************************
> class Foo
> {
> template TBar(T)
> {
> T xx; // Error
> int func(T) { ... } // Error
>
> static T yy; // Ok
> static int func(T t, int y) { ... } // Ok
>
> }
>
> *******************************************************************
>
> What is the "Error" in the code above? Are the docs just out of
> date? The following apparently equivalent code, exercising template
> member functions and data, declared within the enclosing class and
> outside it, seems to compile and run fine:
>
> ********************************************************************
> import std.stdio;
>
> class OBar(T) {
> T xx;
>
> this(T v) { xx = v; }
>
> double func(T t) { return t*5; }
>
> }
>
>
> class BadFoo {
>
> class TBar(T) {
> T xx;
>
> this(T v) { xx = v; }
>
> double func(T t) { return t*5; }
>
> }
>
>
>
> this() {
> d_obar = new OBar!(double)(7.69);
> d_tbar = new TBar!(double)(8.1);
> }
>
> OBar!(double) d_obar;
> TBar!(double) d_tbar;
>
> double func(T)(T t) { return d_tbar.func(t); }
> }
>
>
>
> class Foo(T) {
> this(T t) { d_foo=t; }
>
> T val() { return d_foo; }
>
> T d_foo;
> }
>
> class Test1 {
>
> this(double d) { d_m = d; d_d_foo = new Foo!(double)(3.14159); }
>
> double prod(T)(T t) { return t*d_d_foo.val(); }
>
> double d_m;
>
>
>
> Foo!(double) d_d_foo;
>
>
> }
>
>
> void main() {
>
>
> Test1 t1 = new Test1(3.14);
>
> BadFoo bf = new BadFoo;
>
>
> writefln(t1.prod(5));
> writefln(bf.func(5));
> }
>
> ***********************************************************************
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.
grtz
roel
More information about the Digitalmars-d-learn
mailing list