Thanks for the reply Jiří!

That seems to be an usable solution for this problem. 

I used vala-0.7.5 and git log doesn't look like it has been put into
master branch since then.
regards,
lariamat
 
> That's a bug in Vala.
> The problem is that delegate actually consists of two values - function 
> pointer and object pointer. That's normally done by using two separate 
> variables. Thus, for collections, you need to pack it into one value. 
> Vala doesn't do it automatically at the moment I think (perhaps it's 
> fixed in master, need to check).
> 
> You can work around it by doing this:
> 
> [Compact]
> private class MyDelgTypeWrapper {
>          public MyDelgType deleg;
>          public MyDelgTypeWrapper (MyDelgType deleg) { this.deleg = deleg; }
> }
> 
> ...
> 
> list += new MyDelgTypeWrapper (this.dtest);
> 
> ...
> 
> list[i].deleg(i+1, "hello");
> 
> 
> 
> On 08/09/2009 11:28 AM, lariamat wrote:
> > Dear List
> > I wanted to check the possibility to put delegates into an array or a
> > GLib.List and then firing them one by one in a foreach way.
> > After some attempts I found a compiling solution that unfortunately does
> > not work.
> > Can anybody tell me what I am doing wrong here?
> > Thanks
> > lariamat
> >
> > public class DGLTest : GLib.Object {
> >     public DGLTest() {
> >             print("construct\n");
> >             list = {};
> >     }
> >
> >     //delegatetype
> >     public delegate void MyDelgType(int aint, string bstr);
> >     
> >     //Array for collecting delegates
> >     private MyDelgType[] list;
> >     
> >     
> >     //delegate for testing
> >     public void dtest(int a, string b) {
> >             for(int i=0;i<a;i++)
> >                     print("%s-%d\n", b, i);
> >     }
> >     
> >     //test function for adding delegates to the array and calling them
> > afterwards
> >     public void run() {
> >             for(int i=0;i<4;i++) {
> >                     list+=(MyDelgType)this.dtest;
> >             }
> >             for(int i=0;i<list.length; i++) {
> >                     list[i](i+1, "hello");
> >             }
> >     }
> >     
> >     public static GLib.MainLoop loop;
> >     public static int main(string[] args) {
> >             loop = new GLib.MainLoop(null, false);
> >             DGLTest dglt = new DGLTest();
> >             dglt.run();
> >             loop.run();
> >             return 0;
> >     }
> > }
> >    
> _______________________________________________
> Vala-list mailing list
> [email protected]
> http://mail.gnome.org/mailman/listinfo/vala-list

_______________________________________________
Vala-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/vala-list

Reply via email to