首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在vapi中隐式传递实例

在vapi中隐式传递实例
EN

Stack Overflow用户
提问于 2020-09-28 02:23:34
回答 1查看 65关注 0票数 0

我正在尝试为mongoc库编写一个VAPI。

我已经从struct创建了一些紧凑的类,以及与之相关的一些函数。例如,Client看起来像这样:

代码语言:javascript
复制
[Compact]
[CCode (cname = "mongoc_client_t", free_function = "mongoc_client_destroy", has_type_id = false)]
public class Client {

   [CCode (cname = "mongoc_client_new")]
   public Client (string uri);
}

我还需要绑定一堆相关的函数。我尝试将它们绑定为实例方法,如下所示:

代码语言:javascript
复制
[CCode (cname = "mongoc_client_get_database")]
public Database get_database (Client client, string dbname);
//Database is another compact class

因此,结果是:

代码语言:javascript
复制
[CCode (cheader_filename = "mongoc.h")]
namespace Mongo {
   [Compact]
   [CCode (cname = "mongoc_client_t", free_function = "mongoc_client_destroy", has_type_id = false)]
   public class Client {

      [CCode (cname = "mongoc_client_new")]
      public Client (string uri);

      [CCode (cname = "mongoc_client_get_database")]
      public Database get_database (Client client, string dbname);
   }
}

我希望它接受第一个client参数作为调用实例。而不是这样:

代码语言:javascript
复制
var client = new Client ("uri");
var db = client.get_database (client, "test");
//client is redundant

我试着得到这个:

代码语言:javascript
复制
var client = new Client ("uri");
var db = client.get_database ("test");
//The Client instance is passed implicitly

我尝试过使用this、静态方法、instance_pos和其他调整,但我找不到一种方法让它以这种方式工作。

是否可以在Vala中将实例作为参数隐式传递?如果是这样,我如何才能以一种没有冗余的隐式传递实例的方式来绑定VAPI呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-28 03:54:24

mongoc_client_get_database()的C应用编程接口显示函数签名是:

mongoc_database_t * mongoc_client_get_database (mongoc_client_t *client, const char *name);

因此,monogc_client_t是在C API中显式传递的。在Vala中,这是作为C代码中的实例参数自动生成的。您只需从VAPI中删除显式参数Client client

代码语言:javascript
复制
[CCode (cheader_filename = "mongoc.h")]
namespace Mongo {
   [Compact]
   [CCode (cname = "mongoc_client_t", free_function = "mongoc_client_destroy", has_type_id = false)]
   public class Client {

      [CCode (cname = "mongoc_client_new")]
      public Client (string uri);

      [CCode (cname = "mongoc_client_get_database")]
      public Database get_database (string dbname);
   }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64091867

复制
相关文章

相似问题

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