1

の質問を部分的に解決しました。

GObject現在、サブタイプを登録できます( hpasebindings-gobjectを参照) c'g_type_add_interface_static関数を使用して実装できます(ただし、まだ試していません)。SourceCompletionProvider

唯一の問題は、 からPtr ()返されたc'g_object_newvgtk2hsデータ型に変換することSourceCompletionProviderです。どうすればいいですか?ヒントはありますか?

SourceCompletionProviderは次のように定義されます。

newtype SourceCompletionProvider = SourceCompletionProvider (ForeignPtr (SourceCompletionProvider))

この定義は何を意味するのでしょうか? なぜ再帰的ですか?プロバイダーはForeignPtrtoプロバイダーです-私には奇妙に見えます。

ありがとう。

解決:

makeNewGObject mkGObject $ castPtr <$> c'g_object_newv myObType 0 nullPtr
4

1 に答える 1

1

これはニュータイプであるため、アウターSourceCompletionProviderが必要です。インナーSourceCompletionProviderは、この外部ポインターを他のタイプへのポインターと区別するための単なるマーカーです。の定義Ptr aを見ると、-data Ptr a = Ptr Addr#a右側に表示されないファントムタイプであるため、定義は実際には再帰的ではありません。

Ptr ()aをForeignPtr ()usingに変換してから、withnewForeignPtr_にキャストできます。ForeignPtr SourceCompletionProvidercastForeignPtr

編集:これをもう少し見てから、この作業を行うには、最初に上記の方法でに変換してPtrから、を使用する必要があると思います。ただし、テストされていません。GObjectunsafeCastGObject

于 2012-09-20T10:28:26.183 に答える