Derived type

novice2 sorryno at em.ail
Tue Mar 30 18:51:42 UTC 2021


On Tuesday, 30 March 2021 at 13:43:52 UTC, Mike Parker wrote:
> the straightforward way is just to use an alias.

i cant use alias - compiler cannot distinguish base type and 
alias, and cannot catch programmer errors

> Buf if you need a more concrete type, you can use alias this in 
> a struct:
I think Typedef template should do this struct for me.

Thanks Mike, this way is what i wanted

   struct Xobj {
     private void* payload;
     alias payload this;
   }

   Xobj good;
   foo(good);            //nice
   foo(cast(Xobj)null);  //explicit cast allowed - nice
   foo(null);            //no implicit cast disallowed - compiler 
error - nice

   void* bad;
   foo(bad);             //compiler distinguish type - error - nice


I think Typedef template should do this struct for me.

Problem with Typedef template - code
   alias Xobj = Typedef!(void*)
not generate struct named "Xobj",
but struct named "Typedef!(void*, null, null)".
This makes compiler error messages unusable.

I will try to make template for struct. But template is black 
magic for me :)


More information about the Digitalmars-d-learn mailing list