SWIG一般性问题

SWIG general questions

本文关键字:问题 一般性 SWIG      更新时间:2023-10-16

我正在学习SWIG,我试图理解一些c++可能出现的情况,这些情况在看完文档和示例后我无法弄清楚,以下是我的内容:

usecase1.h

#ifndef __USECASE1_H__
#define __USECASE1_H__
namespace foo_namespace {
    int usecase1_f1( float b, float c, float *res );
}
#endif

usecase1.cpp

int usecase1_f1( float b, float c, float *res )
{
    return 1;
}

usecase2.h

#ifndef __USECASE2_H__
#define __USECASE2_H__
extern double usecase2_v1;
int usecase2_f1(int n);
char *usecase2_f2();
#endif

usecase2.cpp

#include <time.h>
double usecase2_v1 = 3.0;
int usecase2_f1(int n) {
    if (n <= 1) return 1;
    else return n * usecase2_f1(n - 1);
}
char *usecase2_f2()
{
    time_t ltime;
    time(&ltime);
    return ctime(&ltime);
}

usecase3.h

#ifndef __USECASE3_h__
#define __USECASE3_h__
#include <math.h>
namespace foo_namespace {
    static inline float usecase3_f1( float x )
    {
        return 31.0f;
    }
}
#endif

example1_working.i

%module example
%{
    int usecase1_f1( float b, float c, float *res );
    #include "usecase2.h"
%}
int usecase1_f1( float b, float c, float *res );
%include "usecase2.h"

example2_not_working.i

%module example
%{
    #include "usecase1.h"
    #include "usecase2.h"
%}
%include "usecase1.h"
%include "usecase2.h"

问题
  • 声明显式命名空间函数,如在example1_working.i将工作,但我想使用头代替,它似乎swig搞砸了名称空间,有任何解决方案吗?
  • 我如何包装命名空间的函数声明为静态内联在swig文件(usecase3.h)?

确保在运行swig时将-c++传递给swig,默认情况下不启用c++支持。有关c++包装的详细信息,请参阅此处- http://www.swig.org/Doc1.3/SWIGPlus.html