gpt4 book ai didi

c++ - 在 C++ 中实现 GObject 接口(interface)

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:35:58 26 4
gpt4 key购买 nike

我尝试使用 Glibmm(Gtkmm 的一部分)在 C++ 中实现 GType 接口(interface)。该对象将传递给 C 中的 API。不幸的是,documentation对于 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: assertion `GTK_IS_SOURCE_COMPLETION_PROVIDER (provider)' failed

似乎底层的gobj() 并不知道它应该实现这个接口(interface)。如果类不是从 Glib::Object 派生的,gobj() 甚至会返回 null。我希望我不必在 C 中手动编写实现此接口(interface)的 GObject。

那么正确的做法是什么?提前致谢。

PS:有兴趣者:SourceCompletionProvider

最佳答案

最后,我找到了解决办法。

类定义(子类的顺序很重要):

class MonaCompletionProvider : public Glib::Object, public gtksourceview::SourceCompletionProvider {
...

构造函数(同样,顺序很重要):

MonaCompletionProvider::MonaCompletionProvider() :
Glib::ObjectBase(typeid(MonaCompletionProvider)),
Glib::Object(),
gtksourceview::SourceCompletionProvider() {
...

通过检查 Guikachu 中的完成方式找到了解决方案.

关于c++ - 在 C++ 中实现 GObject 接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4985432/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com