- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试从使用 SWIG for Python 包装的 C 函数中输出一组值。我尝试做的方式是使用以下类型映射。
伪代码:
int oldmain() {
float *output = {0,1};
return output;
}
类型图:
%typemap(out) float* {
int i;
$result = PyList_New($1_dim0);
for (i = 0; i < $1_dim0; i++) {
PyObject *o = PyFloat_FromDouble((double) $1[i]);
PyList_SetItem($result,i,o);
}
}
我的代码编译得很好,但是当我运行访问这个函数时它挂起(没有更多的调试方法)。
对我哪里出错有什么建议吗?
谢谢。
最佳答案
允许长度变化的最简单方法是添加另一个输出参数来告诉您数组的大小:
%module test
%include <stdint.i>
%typemap(in,numinputs=0,noblock=1) size_t *len {
size_t templen;
$1 = &templen;
}
%typemap(out) float* oldmain {
int i;
$result = PyList_New(templen);
for (i = 0; i < templen; i++) {
PyObject *o = PyFloat_FromDouble((double)$1[i]);
PyList_SetItem($result,i,o);
}
}
%inline %{
float *oldmain(size_t *len) {
static float output[] = {0.f, 1.f, 2, 3, 4};
*len = sizeof output/sizeof *output;
return output;
}
%}
这是从 this answer 修改而来的添加 size_t *len
可用于在运行时返回数组的长度。 typemap 完全隐藏了 Python 包装器的输出,而是在 %typemap(out)
中使用它而不是固定大小来控制返回列表的长度。
关于 python /痛饮 : Output an array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11679023/
今天我尝试使用“cmake + swig”的组合来为我的代码生成绑定(bind)。基本上它有效: set(SWIG_EXECUTABLE "/usr/bin/swig") find_package(S
我正在尝试从使用 SWIG for Python 包装的 C 函数中输出一组值。我尝试做的方式是使用以下类型映射。 伪代码: int oldmain() { float *output = {0,1}
假设 C++ 类结构如下: namespace MainNS { namespace A { class Class { //.
我正在尝试了解 SWIG 的工作原理。假设我有这个简单的 Foo-Bar 类: #include class Bar { public: Bar(); ~Bar(); int bar_
我正在尝试使用 Swig 从 CXX 模块构建 Perl 模块。有多个与此相关的指南: 通用 Swig tutorial带有 Perl 部分 Swig and C++指导 Swig and Perl5
我正在使用 Swig 将 C/C++ 包装到 Java 中。 我有这个结构: struct score { void* goals; uint32_t goals_number; }
我想使用 swig(它是我的模板引擎)插入 JavaScript,以便只有在选择“其他”选项时才会显示以下内容。 Select Switch Manufacturer Cisco N
我对 SWIG ( C + python ) 有一个奇怪的问题 在 C 中,我有一个返回指向结构 elements_t 的指针的函数。我在 python 中调用函数,得到结果(指针)但我无法访问结构的
我正在尝试为 python 创建一个提供 mysql 连接的 swig 包。但是当我尝试在 python 中导入包时,出现以下错误: -> _mod = imp.load_module('_IMysq
给定这组文件: foo.h: #pragma once #include template class Foo { public: T0 m[3]; Foo(const T0
我是 SWIG 的新手。我创建了一个 python 模块来使用 C++ 类。 我的cpp头代码是 渐变复杂.h : class GradedComplex { public: typedef st
我在 C++ 文件中有类似的东西,它们组成了我的 SWIG 模块: class CObject { public: void do() { // som
我正在使用 SWIG 为我的一个 C 库生成 Java 绑定(bind)。但是我在处理 C 指针时遇到了麻烦。下面是一些代码来演示我的问题: calc.h 文件: extern int sum(int
我是 SWIG 的新手,我使用的相机使用 SWIG 在 Python 中封装 C++。这台相机很特别,因为我无法直接获取原始图像。然后我找到/添加一个可以制作快照的 C++ 函数,它是: int Pi
我正在研究如何使用 swig 为我的 python 代码进行 C 扩展。我使用从网站获得的代码作为示例。这是我的代码: example.c #include double My_variable
我正在尝试使用 SWIG 在 Go 中包装一个 C++ 库,但是自从我升级到 Go 1.4.2 后,我在尝试使用该包时遇到了构建错误。 包可以在这里找到: https://bitbucket.org/
我使用 Swig 从 C/C++ 代码生成 Java 代码。 我得到了很多非人类可读的类,有点像“SWIG_p_f_p_......”,等等。 但是,我需要我最终生成的类遵守一些命名规则。 例如: S
我正在尝试使用 SWIG 在 Go 中包装这个库 ( https://github.com/lemire/EWAHBoolArray ),但是自从我升级到 1.4 后我遇到了很多问题 我已成功使用 G
自从我使用 Swig 以来已经有一段时间了,所以这可能是一些愚蠢的错误。 我使用 swig 为一组函数创建了接口(interface),但有些地方不对劲。例如,当我尝试调用 c 中需要 (int *)
我是一名优秀的程序员,十分优秀!