Swig простой тип typedef аргумент - PullRequest
0 голосов
/ 01 февраля 2019

Я создал C ++ typedef для простого типа в swig to lua, что-то вроде

namespace numbers {
    typedef float float4;
}

Также я создал функции

numbers::float4 foo();
void foo1( numbers::float4 );

Lua code

result = foo()
foo1( result )

ошибка:

 Lua error: Wrong arguments for overloaded function                                                                                                                                                                                           
   Possible C/C++ prototypes are:                                                                                                                                                                                                                                               
     foo1( numbers::float4 ) 

swig, кажется, распознает числа :: float4, но при создании переменной lua это каким-то образом запутывается.

1 Ответ

0 голосов
/ 01 февраля 2019

Слишком долго для комментария:

Я не могу воспроизвести проблему в вопросе.Можете ли вы попробовать выполнить следующие шаги и посмотреть, по-прежнему ли вы получаете сообщение об ошибке?

У меня есть следующие файлы 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
...