www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Template function bug - or am i a retard? you decide.

reply Neal Alexander <wqeqweuqy hotmail.com> writes:
class A
{
     int x[];
     void read_array(alias var, T = typeof(var))(...){ return; }
     void fail(){ read_array!(x)(); }
}

- test.d:5: template instance cannot use local 'x' as template parameter
- gcc version 4.1.3 20070831 (prerelease gdc 0.25, using dmd 1.021)

Moving [read_array] out of [A] or making [x] static "fixes" it. But i 
don't really want to have to pass a 'this' pointer to it every time i 
use it.

Also:
"""
Changelog:

What's New for D 0.173
Nov 1, 2006
New/Changed Features

     * Template instantiations can now accept alias parameters for local 
variables and nested functions.
...
"""

Is there any other/better way to produce the above in a template 
(without [block] being a specific type)?

	    TypeInfo t  = typeid(T);
	    size_t size = ((t.next) ? t.next.tsize : t.tsize) * n;
	    block = cast(typeof(block)) new byte[size];

so passing a uint32_t[] as [block] with [n = 10] would allocate 40 bytes 
and block.length would be 10. Or passing a uint32_t* to it would simply 
assign the allocated blocks address to it.
Dec 20 2007
parent reply BCS <ao pathlink.com> writes:
Reply to Neal,

 class A
 {
 int x[];
 void read_array(alias var, T = typeof(var))(...){ return; }
 void fail(){ read_array!(x)(); }
 }

I don't think you can have non static template functions in a class
Dec 20 2007
parent "Jarrett Billingsley" <kb3ctd2 yahoo.com> writes:
"BCS" <ao pathlink.com> wrote in message 
news:ce0a3343270b28ca1114b0613b1a news.digitalmars.com...
 Reply to Neal,

 class A
 {
 int x[];
 void read_array(alias var, T = typeof(var))(...){ return; }
 void fail(){ read_array!(x)(); }
 }

I don't think you can have non static template functions in a class

Of course you can (though the spec still says otherwise). You can't have _virtual_ templated methods in a class. Templated methods are implicitly final.
Dec 20 2007