Hello! While working on a project of mine, I ran into a situation where it would be beneficial and elegant to call a function with access to the caller's local variables. Of course D supports this with nested functions but the function to be called needs to have access to the private variables of another object. In fact the function should be a member function of the second class, although then it would need to be passed many (6+) variables, most of which will not be needed in most cases. I know another solution would be sacrificing encapsulation and increase the visibility of the members of the second class but that seems much less elegant. Splitting the function into smaller functions is also not possible as what variables are needed is determined by the second object at runtime.
So...

Is there a way to have a function be both a nested function and a member function of a different class?

Perhaps something like

class A
{
    B b = new B();
    int foo()
    {
        int x = 0;
        b.bar();
        return x; //returns 5
    }
}

class B
{
    private int y = 5;
    void A.foo:bar()
    {
        x += y;
    }
}

if there isn't already a way to do this.

Reply via email to