Re: Static method of inner class needs this

2015-02-09 Thread Steven Schveighoffer via Digitalmars-d-learn

On 2/9/15 4:30 AM, ketmar wrote:

On Mon, 09 Feb 2015 07:32:32 +, rumbu wrote:


class Outer {
  class Inner {
  static Inner createInner()
  {
  return new Inner(); //need 'this' to access member
this
  }
  }
}

Is this a bug?


strictly speaking, this is not a bug. compiler doesn't do deep analysis
on nested structures/classes to determine if they really require context
pointer. you can use `static class Inner` to tell the compiler that
`Inner` doesn't require any context.



To expand on this, nested classes (that is, a class nested inside 
another class) REQUIRE a pointer to the outer class instance (accessed 
via hidden member outer). The reason for this is Java portability. 
Seriously :)


-Steve


Re: Static method of inner class needs this

2015-02-09 Thread rumbu via Digitalmars-d-learn

On Monday, 9 February 2015 at 09:30:55 UTC, ketmar wrote:

... you can use `static class Inner` to tell the compiler
that
`Inner` doesn't require any context.


Thank you, static qualifier works. I thought in C# terms where a 
static class means anything else.


Re: Static method of inner class needs this

2015-02-09 Thread ketmar via Digitalmars-d-learn
On Mon, 09 Feb 2015 07:32:32 +, rumbu wrote:

> class Outer {
>  class Inner {
>  static Inner createInner()
>  {
>  return new Inner(); //need 'this' to access member
> this
>  }
>  }
> }
> 
> Is this a bug?

strictly speaking, this is not a bug. compiler doesn't do deep analysis 
on nested structures/classes to determine if they really require context 
pointer. you can use `static class Inner` to tell the compiler that 
`Inner` doesn't require any context.

signature.asc
Description: PGP signature


Re: Static method of inner class needs this

2015-02-09 Thread wobbles via Digitalmars-d-learn

On Monday, 9 February 2015 at 07:32:33 UTC, rumbu wrote:

class Outer
{
class Inner
{
static Inner createInner()
{
return new Inner(); //need 'this' to access member 
this

}
}
}

Is this a bug?

If Inner is not nested, it works as expected:

class Inner
{
static Inner createInner()
{
return new Inner()
}
}

D version: 2.066.1


In the first case, is there an "Inner" that is visible outside of 
"Outer"?
If so, the compiler wont know which one your talking about, so 
need to specify with this.


Static method of inner class needs this

2015-02-08 Thread rumbu via Digitalmars-d-learn

class Outer
{
class Inner
{
static Inner createInner()
{
return new Inner(); //need 'this' to access member 
this

}
}
}

Is this a bug?

If Inner is not nested, it works as expected:

class Inner
{
static Inner createInner()
{
return new Inner()
}
}

D version: 2.066.1