Functions as Struct Properties

Sam S E eisenstat.aa at sympatico.ca
Sat Nov 22 17:41:27 PST 2008


Nick Sabalausky Wrote:

> "Sam S E" <eisenstat.aa at sympatico.ca> wrote in message 
> news:gga2ua$15v7$1 at digitalmars.com...
> > Hi,
> >
> > We already have the notation:
> >
> > int[] array;
> > void foo(int[] a, int x);
> >
> > foo(array, 3);
> > array.foo(3); // means the same thing
> >
> > so why not extend this to struct first arguments?
> > --Sam
> 
> A lot of people want that to be extended to all types. It just doesn't seem 
> to be happening for some reason. Another popular approach (my preference) is 
> something closer to C#'s way of doing it:
> 
> int x;
> void foo(extension int a, int b);
> void bar(int a, int b);
> 
> foo(x, 3); // Ok
> x.foo(3); // Ok
> 
> bar(x, 3); // Ok
> x.bar(3); // Error
> 
> 

That's a good idea, but I would put the keyword on the second case, since you would rarely want to restrict the syntax, causing less typing. I also realized that this could enable a more flexible op overloading syntax:

static Foo opAdd(invariant Foo x, int y)
{
    ...
}

Using current syntax, you can't make the Foo invariant. This has been causing problems with porting a C++ program to D, since C++ supports:

class Foo
{
    ...
    Foo opAdd(int) const
    {
        ...
    }
}

--Sam



More information about the Digitalmars-d mailing list