如何解决在vapi中隐式传递实例
我正在尝试为mongoc
库编写VAPI。
我已经从struct创建了一些紧凑的类,并提供了与它们相关的一些功能。
例如Client
看起来像这样:
[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);
//Database is another compact class
因此,结果是这样的:
[CCode (cheader_filename = "mongoc.h")]
namespace Mongo {
[Compact]
[CCode (cname = "mongoc_client_t",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
参数作为调用实例。
代替这个:
var client = new Client ("uri");
var db = client.get_database (client,"test");
//client is redundant
我正试图得到这个:
var client = new Client ("uri");
var db = client.get_database ("test");
//The Client instance is passed implicitly
我尝试使用this
,静态方法,instance_pos
和其他调整,但没有找到使它以这种方式工作的方法。
是否可以在Vala中将实例作为参数隐式传递? 如果是这样,我该如何以隐式传递实例而不冗余的方式绑定VAPI?
解决方法
functional update的C API显示函数签名为:
mongoc_database_t * mongoc_client_get_database (mongoc_client_t *client,const char *name);
因此monogc_client_t
在C API中显式传递。在Vala中,它会自动生成为C代码中的实例参数。您只需要从VAPI中删除显式参数Client client
:
[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);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。