GObject
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/10/03 03:43 UTC 版)
クラス実装
GObjectのクラスはクラス構造体とインスタンス構造体という少なくとも2つの構造体で実装される。
- クラス構造体
- C++におけるvtableに相当する。先頭にスーパークラスのクラス構造体がある。その後に関数ポインタ群があり、それぞれがクラスの仮想メソッドを指している。クラス固有変数を使って、クラス変数をエミュレートできる。
- インスタンス構造体
- オブジェクトのインスタンス毎に存在する。先頭にスーパークラスのインスタンス構造体がある。その後にインスタンス固有の変数群があり、C++のメンバ変数に対応する。
C言語の構造体には“public”、“protected”、“private”といったアクセス修飾がないので、インスタンス構造体にプライベートデータへのポインタ _priv
がある。プライベート構造体は共通ヘッダファイルに宣言することはできるが、定義は個々の実装ファイルでのみ行われ、外部から見えないようにしている。プライベート構造体をGTypeに登録すると、自動的にオブジェクトシステムで確保される。プライベートデータが必要なとき常に G_TYPE_INSTANCE_GET_PRIVATE
を使うようにすれば、_priv
ポインタを構造体に含める必要はない。
GObjectフレームワークの欠点は、冗長性である。新たなクラスを生成するとき、型登録や各種マクロを多量にコーディングする必要があり、その多くは決まりきった形式である。GObject BuilderやGOB2[4]はこの問題に対処するツールであり、Java風の構文からコードを生成できる。GOB2で書かれたコードはコンパイル前にC言語のコードに展開される。他にもC#風の文法でコーディングできるValaがある。
- ^ GObject Reference ManualArchived 2007年7月3日, at the Wayback Machine.
- ^ GTypeArchived 2007年6月9日, at the Wayback Machine.
- ^ glib-mkenumsArchived 2007年8月12日, at the Wayback Machine.
- ^ GObject Builder
固有名詞の分類
- GObjectのページへのリンク