gpt4 book ai didi

c++ - 如何为返回特定类型的函数创建 SWIG 类型映射

转载 作者:行者123 更新时间:2023-11-28 01:31:45 29 4
gpt4 key购买 nike

我正在尝试为返回特定类型的函数创建 SWIG 类型映射。

例如,这是我的C++函数

t_float get()
{
return 3.14159;
}

t_float 被定义为 floatdouble 取决于一个头文件上的 #define 设置。即使我在 i 文件中包含 header ,SWIG i 文件似乎也无法读取该文件中定义的符号。

所以,我决定为这个函数创建一个类型映射,这样 t_float 类型就可以转换为 lua_number

但我不知道如何为返回值的函数创建类型映射。

我试着自己做,但我做不到。

%typemap(out) t_float
{
lua_pushnumber(L, (lua_Number)($output));
}

如何正确创建类型映射,以便让 get() 在 Lua 中返回一个数字值?

最佳答案

这有点棘手。将结果插入堆栈后,您还必须增加存储在 SWIG_arg 中的返回值的数量。我是在查看了 SWIG 的内部类型映射后才发现的。 (名为 $output 的标识符不存在)。

注意:请立即改掉将值显式转换为所需类型的习惯。这很危险,因为如果类型不匹配,你就是在告诉编译器“无论如何都要将这个位模式解释为所需的类型,我知道我在做什么”。让编译器为你做隐式转换。如果类型不可转换,您还会收到编译器错误,这比运行时出现段错误或垃圾值要好得多。看这个Wandbox link用于演示并注意没有编译器警告!

%module t_float
%{
typedef double t_float;
t_float get() {
return 3.14159;
}
%}

%include <typemaps.i>

%typemap(out) t_float {
lua_pushnumber(L, $1);
++SWIG_arg;
}

t_float get();
local t_float = require("t_float")
print(t_float.get())

关于c++ - 如何为返回特定类型的函数创建 SWIG 类型映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51232778/

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