gpt4 book ai didi

c - 将 C 中的 Ruby block 与 SWIG 结合使用

转载 作者:太空宇宙 更新时间:2023-11-04 04:09:05 25 4
gpt4 key购买 nike

我正在使用 SWIG 在 Ruby 中包装 C 接口(interface)。给定两个结构

typedef struct Vertex {
int color, discoverd, finished;
struct Vertex *next;
} Vertex;

typedef struct Graph {
struct Vertex *vertex;
} Graph;

如何创建生成当前顶点的 #each 方法,以便我可以在 Ruby 中处理它。目前我的 SWIG 接口(interface)文件包含类似

%extend Graph {
void each() {
Vertex *v;

v = self->vertex;
while(v) {
rb_yield(Qnil); // how do I yield a vertex?
v = v->next;
}
}
};

预先感谢您的帮助。

--t6d

最佳答案

一种方法是使用 swig 函数将顶点转换为 VALUE。将 C 结构包装为 ruby​​/swig 对象的 swig 函数是 SWIG_NewPointerObj。

rb_yield(SWIG_NewPointerObj(SWIG_as_voidptr(v), SWIGTYPE_p_Vertex, 0 |  0 ));

SWIG_NewPointerObj/SWIGTYPE_p_* 被定义为包装器中的宏,因此您需要从包装器中调用上述代码(这将在您使用 %extend 时发生)。

关于c - 将 C 中的 Ruby block 与 SWIG 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1709806/

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