Реализация интерфейса GObject на C ++

Я пытаюсь реализовать интерфейс 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

6
задан Meinersbur 17 February 2011 в 18:52
поделиться