dynamic classes and duck typing

Steven Schveighoffer schveiguy at yahoo.com
Tue Dec 1 05:46:25 PST 2009


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

> On Mon, Nov 30, 2009 at 7:12 PM, Walter Bright
> <newshound1 at 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



More information about the Digitalmars-d mailing list