現在、Valaのチュートリアルhttps://wiki.gnome.org/Projects/Vala/Tutorialで作業中です。今私はいくつかのさらなる説明が必要なセクションを見つけました。最後にオブジェクトプロパティの部分で、チュートリアルでは構造体のプロパティを紹介しています。Vala:クラス内の構造体プロパティの理解
struct Color
{
public uint32 argb;
public Color() { argb = 0x12345678; }
}
class Shape: GLib.Object
{
public Color c { get; set; default = Color(); }
}
int main()
{
Color? c = null;
Shape s = new Shape();
s.get("c", out c);
}
チュートリアルの状態:「この方法で、c
ではなく、スタック上の色のインスタンスの参照です何がs.get()
に渡されることはColor **
の代わりである。例としては、一つには、そのようなプロパティを取得する方法を示している与えられ、 Color *.
"
私の質問は上記の文章です。まず、「s.get()
に渡された内容は、の代わりにColor **
です」という意味のものを詳しく説明してください。また、これは値s.c
のに次の
int main()
{
Shape s = new Shape();
Color c = s.c;
}
結果がc
に割り当てられていることを暗示していますか?
編集:上記の例をで実行しました。 main
方法の関連C当量は
gint _vala_main (void) {
gint result = 0;
Color* c = NULL;
Shape* s = NULL;
Shape* _tmp0_ = NULL;
c = NULL;
_tmp0_ = shape_new();
s = _tmp0_;
g_object_get ((GObject*) s, "c", &c, NULL);
result = 0;
_g_object_unref0 (s);
_color_free0 (c);
return result;
}
この精巧な回答と、提供した参考書をありがとうございます。それは私の質問にコンパイルされたCの出力を追加した価値があるもののために; 'g_object_get((GObject *)s、" c "、&c、NULL);' –
これは、コンパイラが私が最初に考えたよりももっと巧妙であるようです。とにかくこのようなものを探すときは、 '-C'を使うのが良い考えです。 –