Swig 简单类型 typedef 参数

我在 swig 中为简单类型创建了 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 变量时却出现了混淆。

点赞
用户1944004
用户1944004

太长了无法放在评论中:

我无法重现问题。您能否尝试以下步骤并查看是否仍会出现错误?

我有以下 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
2019-01-31 23:59:53