Obiekty w C

0

Witam.
Spójrzmy na to:

  GObject
   +----GInitiallyUnowned
         +----GtkObject
               +----GtkWidget
                     +----GtkContainer
                           +----GtkTreeView

http://developer.gnome.org/gtk/2.24/GtkTreeView.html

Hierarchia. Widzimy, że GtkTreeView jest również obiektem GtkWidget. Tylko mam pytanie, jak coś takiego uzyskać w C?
Z C++ nie ma problemu klasy, dziedziczenie, ale C?

0

Gnome pisze się w trochę innym języku niż C - http://en.wikipedia.org/wiki/Vala_(programming_language) . W obecnej implementacji Vala jest tłumaczona do C, a potem kompilowana dopiero, więc możesz sobie np napisać coś w Vali, potem przetłumaczyć na C i zanalizować ten wygenerowany kod.

Writing GObject code in C in the first place, however, is relatively painful. The learning curve is quite steep, and programmers with experience in high-level object-oriented languages are likely to find it very tedious to work with GObject in C. For example, creating a non-trivial subclass (even just a subclass of GObject) can require writing and/or copying hundreds of lines of code.

0

Wala jest kompatybilna z c++?

To jest kod z C++:

GtkTreeWiew *tree = ...;
GtkWidget *widget = reinterpret_cast<GtkWidget*>(tree);

i działa

0
gf napisał(a)

Wala jest kompatybilna z c++?

To jest kod z C++:

GtkTreeWiew *tree = ...;
GtkWidget *widget = reinterpret_cast<GtkWidget*>(tree);

i działa

a to nie można stworzyć sobie we własnym języku operatora 'reinterpret_cast' bo zaraz będzie podejrzenie, że jest on kompatypiblny z c++ ? Składnia c# w kilku miejscach też przypomina składnie c++ to znaczy, że jest on kompatybilny z c++?

0

heh:
Dokładnie. Jak ktoś chce się dowiedzieć jak to działa, to niech przejrzy wygenerowany kod C.

0

Ten kod jest z C++.
Chyba się nie rozumiemy, pytam jak to jest możliwe, że taki kod w c++ przechodzi:

#include <plik_z_c.h>
//...

GtkTreeWiew *tree = ...;
GtkWidget *widget = reinterpret_cast<GtkWidget*>(tree);
//...

Gdyby to były klasy to nie mam prolemu, ale to jest jakoś inaczej zrobione, więc pytam jak

0

To też działa, a klas nie ma:

#include <cstdio>
#include <cstdlib>

struct A {
    int pole;
    
    void wypisz() {
        printf("%d\n", pole + 5);
    }
};

struct B {
    int pole;
    
    void wypisz() {
        printf("%d\n", pole + 7);
    }
};

int main() {
    
    A *a = new A;
    B *b = reinterpret_cast<B*>(a);
    
    a->pole = 8;
    
    a->wypisz();
    b->wypisz();
    
    return 0;
}
0
Wibowit napisał(a)

Gnome pisze się w trochę innym języku niż C - http://en.wikipedia.org/wiki/Vala_(programming_language) . W obecnej implementacji Vala jest tłumaczona do C, a potem kompilowana dopiero, więc możesz sobie np napisać coś w Vali, potem przetłumaczyć na C i zanalizować ten wygenerowany kod.

Kolega pytał o GObject/Gtk, a nie GNOME ;)

Jako odpowiedź zaproponuję to: http://tinobox.com/wordpress/tag/ooc/

0

Dzięki Kumashiro, o to mi chodziło.

1 użytkowników online, w tym zalogowanych: 0, gości: 1