Re: [Vala] How to check what a Gee.List contains



On Sun, Apr 04, 2010 at 10:09:24 -0700, Tristin Celestin wrote:
Is there a means to figure out what kinds of variables a Gee.List stores?

The following doesn't work because if I call mystery_list.get(0), I get
the compiler error: has no member named ‘g_destroy_func’.

Hm, that's bad compiler error. It should tell you that Gee.List is generic
and can't be used without the type parameter.

using Gee;

public bool perform (Gee.List mystery_list) {
    if (! mystery_list.is_empty) {
        Value val = mystery_list.get (0);
        if (val.type().is_value_type) {
            // something something
        }
    }
}

If I cast mystery_list to Gee.List <Object>, my problem is solved (because
now a destructor is available), but then that means that mystery list
can only contain items descended from GObject.

The list can't contain types not derived from common base. Simply because it
does not have any per-element type tag. It only has one for the whole list
(the type parameter).

If you really wanted to have a list of mixed non-Object items, you can get it
by creating a list of GLib.Value (it's a struct, so you'll have to box it by
writing Value?). Value can store anything and knows what it stores.

-- 
                                                 Jan 'Bulb' Hudec <bulb ucw cz>



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]