Determining whether a class has a method
Bill Baxter
dnewsgroup at billbaxter.com
Thu Nov 29 20:00:28 PST 2007
Christopher Wright wrote:
> 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];
Foo is a type. So Foo.tupleof would be a type tuple (if anything -- I'm
not sure that works, though it does for structs).
You probably need
auto a = (new Foo).tupleof[0];
--bb
More information about the Digitalmars-d-learn
mailing list