Determining whether a class has a method

Christopher Wright dhasenan at gmail.com
Thu Nov 29 19:58:40 PST 2007


Jarrett Billingsley wrote:
> "Christopher Wright" <dhasenan at gmail.com> wrote in message 
> news:finqpt$lnj$2 at digitalmars.com...
>> Jarrett Billingsley wrote:
>>> "Christopher Wright" <dhasenan at gmail.com> wrote in message 
>>> news:fink7k$6ph$1 at digitalmars.com...
>>>
>>>> But tupleof fails if you give it a class that has fields (methods are 
>>>> fine, but data fields aren't). I'm pretty sure this is a bug; can anyone 
>>>> else comment on it?
>>> tupleof is supposed to give you a tuple of fields.  It will never give 
>>> methods.
>> And it's supposed to work for classes?
> 
> Yes.  It's all in the spec:
> Class Properties
> The .tupleof property returns an ExpressionTuple of all the fields in the 
> class, excluding the hidden fields and the fields in the base class.

Ah. Then it's not supposed to generate an error:
Error: type Foo is not an expression

For reference, here's the code, and I think it's not my error:

class Foo {
// Comment the following line to eliminate the error:
// Error: type Foo is not an expression
    int i;
}

foreach (blah; Foo.tupleof) {
    writefln("%s", blah.stringof);
}
// or:
auto a = Foo.tupleof[0];


More information about the Digitalmars-d-learn mailing list