gpt4 book ai didi

用c扩展制作的对象可以相互实例化和管理吗?

转载 作者:太空宇宙 更新时间:2023-11-03 18:00:14 25 4
gpt4 key购买 nike

现在我有一系列使用 C 扩展创建的对象,所以说它们是

  • 酒吧
  • 巴兹。

我有 ruby​​ 代码可以实例化它们三个,调用它们的函数并处理结果。我们称之为:

  • 经理

嗯,现在管理器是我的瓶颈,所以我想把它变成一个 C 扩展。但是我不知道如何从 Manager 中实例化 Foo、Bar 和 Baz。我是否必须使用如下代码:

VALUE module_klass = rb_const_get(rb_cObject, rb_intern("Module"));
VALUE object_klass = rb_const_get(module_klass, rb_intern("Foo"));

然后调用如下方法:

rb_funcall(object_klass, rb_intern("new"), 0);     

或者有更简洁的方法吗?

最佳答案

查看 rb_class_new_instance()。你会做这样的事情:

VALUE module_klass = rb_const_get(rb_cObject, rb_intern("Module"));
VALUE foo_klass = rb_const_get(module_klass, rb_intern("Foo"));
VALUE foo = rb_class_new_instance(0, NULL, foo_klass);
VALUE data = rb_funcall(foo, rb_intern("some_foo_method"), ...);

关于用c扩展制作的对象可以相互实例化和管理吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6552505/

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