Suggestion: signal/slot mechanism
Serg Kovrov
kovrov at no.spam
Thu Sep 7 02:50:27 PDT 2006
The approach (simplified), I currently use:
> class Foo
> {
> enum EV {VAL_CHANGED,}
> void emit(EV ev) {
> auto fn = ev in subscribers;
> try { if (fn != null) (*fn)(); }
> catch (Exception wtf) { writefln("WTF? %s", wtf); }
> }
> void sub(EV ev, void delegate() fn) {
> subscribers[ev] = fn;
> }
> int val(int i) {
> value = i;
> emit(EV.VAL_CHANGED);
> return value;
> }
> int val() {
> return value;
> }
> void delegate()[EV] subscribers;
> int value;
> }
>
> class Bar
> {
> this(Foo f) {
> foo = f;
> foo.sub(Foo.EV.VAL_CHANGED, &receive);
> }
> void receive() {
> writefln("received %d", foo.val);
>
> }
> Foo foo;
> }
>
> void main()
> {
> auto f = new Foo();
> auto b = new Bar(f);
> f.val = 1;
> delete b;
> f.val = 2;
> }
--
serg.
More information about the Digitalmars-d
mailing list