On Mon, 30 Nov 2009 23:32:21 -0500, Bill Baxter <wbax...@gmail.com> wrote:

On Mon, Nov 30, 2009 at 7:12 PM, Walter Bright
<newshou...@digitalmars.com> wrote:
Bill Baxter wrote:

So we can overload on @property-ness?

No.

I.e. this works

struct S
{
@property
float x() { return 1.0f; }
float x() { return 2.0f; }
}

void main()
{
   S  s;
   writefln("%s", s.x); // writes 1.0
   writefln("%s", s.x()); // writes 2.0
}

That just looks wrong.


Ok, so you can't have both dynamic properties and dynamic methods with
this.  One or the other, your pick.
Seems like an unfortunate limitation.


what a minute, can't you use template conditionals to distinguish? i.e. I would expect this to work:

struct S
{
  @property float opDispatch(string s)() if (s == "x") {return 1.0f;}
  float opDispatch(string s)() { return 2.0f;}
}

void main()
{
  S s;
  writefln("%s", s.x); // 1.0
  writefln("%s", s.y()); // 2.0
}

Overloading opDispatch based on the called symbol name should always be possible, and overloading on parameter types is always possible.

-Steve

Reply via email to