www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - implicit constructor template instantiation

reply Daniel919 <Daniel919 web.de> writes:
Hi,

this code is perfectly valid and working
with dmd 0.174:
------------------------------------------------
import std.stdio;

class Base
{
    this()
    {
       value = 0;
    }

    this(int a)
    {
       value = a;
    }

    int value;
}


class Derived (A...) : Base
{
    this(A a)
    {
       super(a);
    }
}

int main(char[][] args)
{
    Derived!(int) derived = new Derived!(int)(1);
    writefln(derived.value);
    return 0;
}
------------------------------------------------

But I would like to use implicit template
instantiation on constructor this as well.
So it would look like:

------------------------------------------------
...
class Derived : Base
{
    this(A...)(A a)
    {
       super(a);
    }
}
...
Derived derived = new Derived(1);
...
------------------------------------------------

Couldn't the constructor be implicitly templated, like
member function's, for example:
void print(A...)(A a) { } ?

Thanks for your replies in advance

Daniel
Nov 24 2006
parent Daniel919 <Daniel919 web.de> writes:
Hi, implicit template instantiation is working for
other class members as expected (first code example shown below).

So why not make it working for constructor "this", too ?
Is this feature just missing or is it technically impossible ?

In the former case I would be pleased to see this feature on the todo 
list, because it would solve the problem of constructor inheritance
(like I showed in my last post to this topic, which is quoted below).

Thanks in advance

------------------------------------------------
import std.stdio;

class Base
{
    this() {}

    void init()
    {
       value = 0;
    }

    void init(int a)
    {
       value = a;
    }

    int value;
}


class Derived : Base
{
    this() {}

    void superinit(A...)(A a)
    {
       init(a);
    }
}

int main(char[][] args)
{
    Derived derived;

    derived = new Derived();
    derived.superinit();
    writefln(derived.value);
    delete(derived);

    derived = new Derived();
    derived.superinit(1);
    writefln(derived.value);
    delete(derived);
    return 0;
}
------------------------------------------------




Daniel919 wrote:
 Hi,
 
 this code is perfectly valid and working
 with dmd 0.174:
 ------------------------------------------------
 import std.stdio;
 
 class Base
 {
    this()
    {
       value = 0;
    }
 
    this(int a)
    {
       value = a;
    }
 
    int value;
 }
 
 
 class Derived (A...) : Base
 {
    this(A a)
    {
       super(a);
    }
 }
 
 int main(char[][] args)
 {
    Derived!(int) derived = new Derived!(int)(1);
    writefln(derived.value);
    return 0;
 }
 ------------------------------------------------
 
 But I would like to use implicit template
 instantiation on constructor this as well.
 So it would look like:
 
 ------------------------------------------------
 ...
 class Derived : Base
 {
    this(A...)(A a)
    {
       super(a);
    }
 }
 ...
 Derived derived = new Derived(1);
 ...
 ------------------------------------------------
 
 Couldn't the constructor be implicitly templated, like
 member function's, for example:
 void print(A...)(A a) { } ?
 
 Thanks for your replies in advance
 
 Daniel
Dec 01 2006