@ Dmitry
Thanks for all the feedback Dmitry. Seems that we have similar projects in mind :) (maybe we can talk about the GUI project.. mine is similar to win32++ at http://sourceforge.net/projects/win32-framework/)
------------------------------------------------------------------------

However : Like you I would prefer to use something like ..

void delegate(const ref message) CallBack;
CallBack[] cb;
@Jakob
Adding some delegates to our list (D dyn. array) like in C# is a piece of cake..

But keep in mind that we also need removeObserver() in order to implement the Observer pattern. And removing makes the difference.

The question is now :
How do we identify our Observer object in order to remove..
possible solutions :

1) passing the object instance to the mixin template. (as shown in my code) adding of course a : toHash() method.
2)
adding a GUID to the delegate..
3)
...

Dmitry, I think

YOUR :

final class Observable(Cont){
    Cont cont;
    //here goes your current Publisher stuff
    //...
    alias Cont!ElementType T;
    static if(__traits(compiles,cont.insert(T.init)))//some such ...    
need to test if it has this method

SOLUTION

is very hackish. (Beside, like IsForwardRange!R )

IMHO a mixin template is a more clean solution.

BUT this requires that container/collection classes are not final.

Well, even for final classes there is still the option to implement a decorator pattern! But the decorator pattern makes code quite unreadable...

However, ATM I am thinking about how we can you use std.concurrent message passing stuff...

Finally
Would be nice if we can write a few LOC together! ??
bjoern
PS> Sure the Publisher/Observable mixin has to work for structs too.



Reply via email to