Apologies for my confusedf terminology. I'm meeting with repeated
abysmal failure trying to bend generics to my will.

Going back to basics, I started with the example code at
https://live.gnome.org/Vala/Tutorial#Generics.

I had to rename set_data() and get_data() to get this to compile, but
that's no deal.

My simple goal is this: having created a wrapper<string>, how do I
print it's length inside of set_thing(G data) ?? Or indeed access any
properties or methods of the specific 'G' thingy?

I can understand run-time errors if I instantiated a wrapper of some
non-gobject type, but the compile time error "the name 'get_type' does
not exist in the context of 'G'" has me baffled.

Here are my various attempts:


public class Wrapper<G> : Object {
    private G data;

    public void set_thing(G data) {
        this.data = data;

#if broken
        var x = data.length;  /* can't use String methods.... */
#endif

#if broken
        Type t = data.get_type(); /* can't use Object methods either... */
#endif

#if broken
        G x = data;               /* No */
        Type t = x.get_type();
#endif

#if broken
        var x = (G)data;          /* No */
        Type t = x.get_type();
#endif


#if segfault
        var x = data as Object; /* Works so far... */
        Type t = x.get_type();
        stdout.printf("x is %p\n", x); /* seg fault */
#endif

#if illegal
        var x = data as string; /* Operation not supported for type */
        Type t = x.length;
#endif

#if segfault
        var x = data as Object;
        int l;
        x.get("length", out l); /* seg fault */
#endif

    }

    public G get_thing() {
        return this.data;
    }
}

/********************************************************************************/

public static int main(string[] args) {

    var wrapper = new Wrapper<string>();
    wrapper.set_thing("test");


    return 0;
}



cheers
ant
_______________________________________________
vala-list mailing list
vala-list@gnome.org
http://mail.gnome.org/mailman/listinfo/vala-list

Reply via email to