Am 26.04.2011 21:55, schrieb Philippe Sigaud:
On Tue, Apr 26, 2011 at 18:41, Benjamin Thaut<c...@benjamin-thaut.de> wrote:
Thanks, but that is not connected to my question at all,
I want to implement the echo method so that the type is passed as a template
argument, and not as a function argument. While that is happening I still
want to be able to overload the function.
Is this possible in D 2?
I'm not sure I understand what you're trying to do (didn't read
"Modern C++ design"). Here is something that compiles:
import std.stdio;
class Foo(T,R...) : Foo!(R) {
public void print(){
writeln(T.stringof);
super.print();
}
public void echo(U)(U u = U.init) {
writeln(U.stringof);
}
}
class Foo(T){
public void print(){
writeln("end: " ~ T.stringof);
}
public void echo(U)(U u = U.init) {
writeln(U.stringof);
}
}
void main(string[] args){
auto test = new Foo!(int,float,double,short,byte)();
test.print();
test.echo!double;
test.echo!short;
}
The Problem with that version is, that the code that is generated looks like
void main(string[] args){
auto test = new Foo!(int,float,double,short,byte)();
test.print();
test.echo!double(double.init);
test.echo!short(short.init);
}
If the types that are used, are no simple data types, but rather large
structs, they are copied on every function call. Thats exactly what I
want to avoid. The Type2Type template has a size of 0, thats why I'm
using that in the first place.
--
Kind Regards
Benjamin Thaut