Question about typeof(this)

Jacob Carlborg doob at me.com
Tue Sep 7 11:37:49 PDT 2010


On 2010-09-07 17:34, Stanislav Blinov wrote:
> 07.09.2010 17:00, Jacob Carlborg пишет:
>> I'm reading http://www.digitalmars.com/d/2.0/declaration.html#Typeof
>> where it says:
>>
>> "typeof(this) will generate the type of what this would be in a
>> non-static member function, even if not in a member function. "
>>
>> From that I got the impression that the code below would print the
>> same result, but it doesn't. It prints:
>>
>> main.Bar
>> main.Foo
>>
>> instead of:
>>
>> main.Foo
>> main.Foo
>>
>> Is this a bug or have I misunderstood the docs?
>>
>>
>> module main;
>>
>> import std.stdio;
>>
>> class Bar
>> {
>> void method ()
>> {
>> writeln(typeid(typeof(this)));
>> writeln(typeid(this));
>> }
>> }
>>
>> class Foo : Bar {}
>>
>> void main ()
>> {
>> auto foo = new Foo;
>> foo.method;
>> }
>>
> I don't think it's a bug. More of it, Expressions page in the docs has
> your very same example in Typeid section.
>
> Inside Bar.method, typeof(this) yields a type (Bar), and typeid for
> types gets you, well, typeid for types :) typeid(this), hovewer, should
> get typeinfo for most derived class, which it does.

No it's not the same example. In the example on the Expressions page 
typeid is used on the static type A with the dynamic type B. I have both 
the static and dynamic type Foo. I think in my example the compiler have 
all the necessary information at compile time and typeof(this) would 
resolve to the type of the receiver, i.e. the type of "foo" which is Foo.

-- 
/Jacob Carlborg


More information about the Digitalmars-d-learn mailing list