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

Reply via email to