inner member classes in final outer class

coxalan coxalan at web.de
Sun Sep 16 09:07:51 PDT 2007


Matti Niemenmaa Wrote:

> coxalan wrote:
> > Matti Niemenmaa Wrote:
> >> coxalan wrote:
> >>> Bruno Medeiros Wrote:
> >>>
> >>>> I was thinking the following:
> >>>>
> >>>>    class Outer {
> >>>>    }
> >>>>
> >>>>    class Inner(alias outer) {
> >>>>      static assert(is(outer : Outer)); // Just a check
> >>>>    }
> >>>>
> >>>>    final Outer o1 = new Outer();
> >>>>    final Outer o2 = new Outer();
> >>>>
> >>>>    void main() {
> >>>>        Inner i1 = new Inner!(o1);
> >>>>        Inner i2 = new Inner!(o1);
> >>>>
> >>>>        Inner i3 = new Inner!(o2);
> >>>>        Inner i4 = new Inner!(o2);
> >>>>    }
> >>> Thanks. That looks quite promising.
> >>>
> >>> But it does not compile for me:
> >>> test.d(12): class test.Inner(alias outer) is used as a type
> >>> test.d(12): variable test.main.i1 voids have no value
> >> Probably because he uses "Inner i[1234]" where he should use "Inner!(o[1234])
> >> i[1234]". The easiest solution is to use "auto" on the left-hand side of the
> >> assignments.
> > 
> > Thanks. Now I get:
> > test.d(5): static assert  is false
> > 
> > Disclaimer: I'm quite new to D.
> 
> Alright, I took a closer look and this compiles:
> 
> class Outer {
> }
> 
> class Inner(alias outer) {
> 	static assert(is(typeof(outer) : Outer)); // Just a check
> }
> 
> final Outer o1;
> final Outer o2;
> 
> static this() {
> 	o1 = new Outer;
> 	o2 = new Outer;
> }
> 
> void main() {
> 
> 	auto i1 = new Inner!(o1);
> 	auto i2 = new Inner!(o1);
> 
> 	auto i3 = new Inner!(o2);
> 	auto i4 = new Inner!(o2);
> }

Thanks!



More information about the Digitalmars-d mailing list