On Tuesday, 17 April 2018 at 03:55:55 UTC, Chris Katko wrote:
What I want:

class viewport_t
  {
  int x,y,w,h;
  }

class dialog_t
  {
  int x,y;

  this( int x, int y, delegate void (viewport_t) on_draw )
    {
    this.x = x;
    this.y = y;
    this.execute = execute;
    }

  void draw_text(string text)
    {
    }

  delegate void (viewport_t) on_draw;
  }

void function()
  {
  viewport_t v;
  dialog_t (15, 15,
        delegate void (viewport_t)
          {
          draw_text("hello world"); //calls dialog_t function
          }
        )
  }

Is this possible? Pass to a class, the code to run. But the code has to somehow know about the class methods.

I don't think you can pass "dialog_t.this" as it's being constructed!

Depending on exactly what you want to do, this may be impossible, or bauss' code might fit the bill, or you could use anonymous classes:


class viewport_t
{
    int x,y,w,h;
}

class dialog_t
{
    int x,y;

    this( int x, int y)
    {
        this.x = x;
        this.y = y;
    }

    void draw_text(string text)
    {
    }

    abstract void on_draw(viewport_t);
}

void fn()
{
    viewport_t v;
    auto d = new class dialog_t {
        this() { super(15,15); }
        override void on_draw(viewport_t) {
            draw_text("hello world");
        }
    };
}

--
  Simen

Reply via email to