Swig 简单类型 typedef 参数
Swig simple type typedef argument
我为 lua 中的简单类型创建了 C++ typedef,类似于
namespace numbers {
typedef float float4;
}
我还创建了函数
numbers::float4 foo();
void foo1( numbers::float4 );
Lua代码
result = foo()
foo1( result )
错误:
Lua error: Wrong arguments for overloaded function
Possible C/C++ prototypes are:
foo1( numbers::float4 )
swig 似乎可以识别 numbers::float4,但在创建 lua 变量时它会以某种方式混淆。
评论太长:
我无法重现问题中的问题。可以试试下面的步骤,看看是否还报错?
我有以下 C++ 文件:
test.hpp
#pragma once
namespace numbers {
typedef float float4;
}
numbers::float4 foo();
void foo1( numbers::float4 );
test.cpp
#include <iostream>
#include "test.hpp"
numbers::float4 foo() {
return 3.14f;
}
void foo1(numbers::float4 f) {
std::cout << f << '\n';
}
还有懒人的SWIG接口文件:
test.i
%module example
%{
#include "test.hpp"
%}
%include "test.hpp"
然后我生成包装器代码并将所有内容编译到一个共享对象中。
$ swig -c++ -lua test.i
$ g++ -I/usr/include/lua5.2 -fPIC -shared test_wrap.cxx test.cpp -o example.so
以下示例脚本运行良好。
test.lua
local example = require"example"
local foo = example.foo
local foo1 = example.foo1
result = foo()
foo1( result )
$ lua test.lua
3.14
我为 lua 中的简单类型创建了 C++ typedef,类似于
namespace numbers {
typedef float float4;
}
我还创建了函数
numbers::float4 foo();
void foo1( numbers::float4 );
Lua代码
result = foo()
foo1( result )
错误:
Lua error: Wrong arguments for overloaded function
Possible C/C++ prototypes are:
foo1( numbers::float4 )
swig 似乎可以识别 numbers::float4,但在创建 lua 变量时它会以某种方式混淆。
评论太长:
我无法重现问题中的问题。可以试试下面的步骤,看看是否还报错?
我有以下 C++ 文件:
test.hpp
#pragma once
namespace numbers {
typedef float float4;
}
numbers::float4 foo();
void foo1( numbers::float4 );
test.cpp
#include <iostream>
#include "test.hpp"
numbers::float4 foo() {
return 3.14f;
}
void foo1(numbers::float4 f) {
std::cout << f << '\n';
}
还有懒人的SWIG接口文件:
test.i
%module example
%{
#include "test.hpp"
%}
%include "test.hpp"
然后我生成包装器代码并将所有内容编译到一个共享对象中。
$ swig -c++ -lua test.i
$ g++ -I/usr/include/lua5.2 -fPIC -shared test_wrap.cxx test.cpp -o example.so
以下示例脚本运行良好。
test.lua
local example = require"example"
local foo = example.foo
local foo1 = example.foo1
result = foo()
foo1( result )
$ lua test.lua
3.14