Glibmm(Gtkmmの一部)を使用してC++でGTypeインターフェースを実装しようとしています。オブジェクトはCのAPIに渡されます。残念ながら、gtkmmのドキュメントには、GObjectシステムをラップする方法の詳細が多く含まれていません。
私がこれまでに持っているもの:
class MonaCompletionProvider : public gtksourceview::SourceCompletionProvider, public Glib::Object
{
public:
MonaCompletionProvider();
virtual ~MonaCompletionProvider();
Glib::ustring get_name_vfunc() const;
// ... and some more
}
すべてのメソッドとコンストラクターの実装は空です。コードは次のように使用されます。
Glib::RefPtr<MonaCompletionProvider> provider(new MonaCompletionProvider());
bool success = completion->add_provider(provider);
success
このコードを実行するとfalseになり、コマンドラインに次のメッセージが表示されます。
(monagui:24831):GtkSourceView-CRITICAL **:gtk_source_completion_add_provider:アサーション `GTK_IS_SOURCE_COMPLETION_PROVIDER(プロバイダー)'が失敗しました
原資産gobj()
は、このインターフェースを実装することになっていることを認識していないようです。クラスがから派生していない場合でもGlib::Object
、gobj()
nullを返します。このインターフェイスをCで実装するGObjectを手動で作成する必要がないことを願っています。
では、これを行う正しい方法は何ですか?前もって感謝します。
PS:興味のある方へ:SourceCompletionProvider