dynamic classes and duck typing

Denis Koroskin 2korden at gmail.com
Tue Dec 1 05:49:58 PST 2009


On Tue, 01 Dec 2009 16:46:25 +0300, Steven Schveighoffer  
<schveiguy at yahoo.com> wrote:

> 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

What if you don't know argument names a-priori? Consider a generic Dynamic  
class that has nothing but a single opDispatch method.



More information about the Digitalmars-d mailing list