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