首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >返回GObject指针的抽象类型中的虚函数不可内省

返回GObject指针的抽象类型中的虚函数不可内省
EN

Stack Overflow用户
提问于 2021-03-15 15:51:33
回答 1查看 25关注 0票数 0

我在使用libpeas时,偶然发现了一个关于gobject内省工作方式的问题。

libpeas中,有一种称为PluginLoader的类型(请参阅here)。

有一个名为create_extension的方法,它返回指向GObject的指针PeasExtension *。当我将这个类型添加到gobject-introspection中并检查这个方法的结果GIR文件时,我可以看到它被标记为introspectable="0"

代码语言:javascript
复制
<field name="create_extension" introspectable="0">
<callback name="create_extension" introspectable="0">
  <source-position filename="../libpeas/peas-plugin-loader.h"
                   line="60"/>
  <return-value>
    <type name="Extension" c:type="PeasExtension*"/>
  </return-value>
  <parameters>
    <parameter name="loader" transfer-ownership="none">
      <type name="PluginLoader" c:type="PeasPluginLoader*"/>
    </parameter>
    <parameter name="info" transfer-ownership="none">
      <type name="PluginInfo" c:type="PeasPluginInfo*"/>
    </parameter>
    <parameter name="ext_type" transfer-ownership="none">
      <type name="GType" c:type="GType"/>
    </parameter>
    <parameter name="n_parameters" transfer-ownership="none">
      <type name="guint" c:type="guint"/>
    </parameter>
    <parameter name="parameters" transfer-ownership="none">
      <type name="GObject.Parameter" c:type="GParameter*"/>
    </parameter>
  </parameters>
</callback>
</field>

当我将返回值更改为void *并重新编译时,introspectable="0"属性从GIR文件中消失了。如果我将其更改为GObject *,则introspectable="0"属性仍然存在。

当它返回一个GObject实例(一个指针)时,它看起来就像是不可内省的。但我不明白为什么?

通过阅读gobject内省文档,可以看出返回一个GObject实例是一个有效的用例。也许这与PluginLoader类型是抽象的,而这是一个虚方法有关?

在不改变方法签名的情况下,有没有注释可以帮助这个对象变得可内省?

EN

回答 1

Stack Overflow用户

发布于 2021-03-27 21:23:33

在Philip在评论中的帮助下,我设法解决了这个问题。

实际上,在g-ir-scanner的输出中有一条消息说:

代码语言:javascript
复制
../../source/libpeas/libpeas/peas-plugin-loader.h:91: Warning: Peas: peas_plugin_loader_create_extension: return value: Missing (transfer) annotation

通过这条消息,我明白了要使虚函数create_extension可内省,我必须添加注释,但不是在PeasPluginLoaderClass定义中的函数指针处,而是在访问器函数peas_plugin_loader_create_extension的旁边。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66634153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档