inheriting ctors?

Philippe Sigaud philippe.sigaud at gmail.com
Fri Aug 6 09:42:56 PDT 2010


On Fri, Aug 6, 2010 at 11:43, Rory Mcguire <rjmcguire at gm_no_ail.com> wrote:


> I've been trying to make a template for this but it seems that dmd still
> won't allow me to get the parameters of the constructors. dmd Seems to
> think
> that I'm trying to use it as a property.
>
>

> void main() {
>    foreach (m; __traits(getOverloads, A, "__ctor")) {
>        pragma(msg, m.stringof); // it thinks I'm calling m
>    }
> }
>
> constructors.d(34): Error: constructor constructors.A.this (int x) is not
> callable using argument types ()
>

This is my new once-a-day bug :(
Using a function alias, and being unable to call properties on it, because
DMD thinks I'm calling it. Man, it's no property, just a name!

Anyway, just pragma(msg, m) works, strangely.
I think I found a way to use m, somewhat:

void main() {
   foreach (m; __traits(getOverloads, A, "__ctor")) {
       pragma(msg, m); // it thinks I'm calling m
       typeof(&m) tmp = &m;
        writeln( (ParameterTypeTuple!tmp).stringof); // (int), (double),
(string)
        writeln( (ParameterTypeTuple!m).stringof); // (int), (int), (int)
        writeln( typeof(&m).stringof); // A function(int x), A
function(double x), A function(string s)
   }
}

using ParameterTypeTuple!m directly does not differentiate the m's. But
using a temporary pointer, it seems to work.

Oh and I even get the arguments names !


Philippe
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puremagic.com/pipermail/digitalmars-d-learn/attachments/20100806/67ada868/attachment.html>


More information about the Digitalmars-d-learn mailing list