alias this & cast

andre via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu Sep 11 09:18:11 PDT 2014


I am not sure. b is C but everything not in super class B is 
hidden.
Using cast I can cast b to a full C.

The cast "cast(C)b" has the same information about b like the 
cast "cast(A)b": The memory area of b knows compatitibility to C 
and also the alias.

For me, using alias this, the object b has 3 represenations: A, B 
and C. It is a matter of steps.

Kind regards
André

On Thursday, 11 September 2014 at 11:53:30 UTC, Daniel Kozak via 
Digitalmars-d-learn wrote:
> V Thu, 11 Sep 2014 11:40:05 +0000
> andre via Digitalmars-d-learn 
> <digitalmars-d-learn at puremagic.com>
> napsáno:
>
>> Hi,
>> 
>> I am 80% sure, the failing assertion is correct but please 
>> have a look.
>
> No it is not
>
> assert(cast(A)cast(C)b); // this is OK
>
> b is B so it does not know about having alias to A;
>
>> Second assertion fails.
>> 
>> Kind regards
>> André
>> 
>> class A{}
>> 
>> class B{}
>> 
>> class C : B
>> {
>> 	A a;
>> 	alias a this;
>> 	
>> 	this()
>> 	{
>> 		a = new A();
>> 	}
>> }
>> 
>> void main()
>> {
>> 	B b = new C();
>> 
>> 	// OK
>> 	assert(cast(C)b);
>> 	
>> 	// fails
>> 	assert(cast(A)b);	
>> }



More information about the Digitalmars-d-learn mailing list