Я пытаюсь реализовать интерфейс GType на C ++, используя Glibmm (часть Gtkmm). Объект будет передан в API на C. К сожалению, документация для 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 provider(new MonaCompletionProvider());
bool success = completion->add_provider(provider);
success
будет ложным после выполнения этого кода, и в командной строке появится следующее сообщение:
(monagui: 24831): GtkSourceView-КРИТИЧЕСКИЙ **: gtk_source_completion_add_provider: утверждение `GTK_IS_SOURCE_COMPLETION_PROVIDER (provider) 'не удалось
Похоже, что базовый gobj ()
не знает, что он должен реализовывать этот интерфейс. Если класс не является производным от Glib :: Object
, gobj ()
даже возвращает null. Я надеюсь, что мне не нужно писать GObject, реализующий этот интерфейс на C вручную.
Как правильно это сделать? Заранее спасибо.
PS: Для тех, кому интересно: SourceCompletionProvider