3

私は C ライブラリを作成し、vapigen を使用して vapis を作成しました。生成されたファイルには、次のように定義されたいくつかのプロパティがあります。

public int index { get; set; }

そして、アクセサ メソッド (私は C から使用し、プロパティの値のみを返します) は、この「get」および「set」機能を複製します。

public int get_index ();
public void request_index (int index);

私がやりたいことは、Vala コードが表記法を使用してプロパティを取得または設定するときに、Vala に私のメソッドを呼び出すように指示することです。

i = object.index;
object.index = 42;

g_object_get現在のように/g_object_set呼び出しに変換する代わりに。

これを行う方法はありますか?

これを vala-devel と vala の両方のメーリング リストに投稿しましたが、誰も回答しませんでした。

編集: gobject-introspection と vapigen を autotools で使用して、API の変更を気にせずに vapi ファイルを自動的に生成しているため、Vala でクラスを再定義してこれを行うことはできませんが、gobject-introspection 注釈メタデータファイル。

解決策で編集:選択した回答のコメントには私の問題の解決策が含まれていますが、基本的に私がしたことは、カスタム Vala ファイルを使用し、メタデータ ファイルを使用して使用済みプロパティをスキップすることです。

メタデータ ファイルの関連コンテンツ:

MyObject.index skip

そして、カスタム Vala ファイルで:

namespace MyNamespace
{
    public class MyObject : GLib.Object
    {
        public int index
        {
            owned get;
            [CCode (cname = "db_model_request_index")]
            set;
        }
    }
}
4

2 に答える 2