SWIG一般问题

时间:2016-10-04 15:41:23

标签: python c++ namespaces inline swig

我正在学习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文件(usecase3.h)中包装声明为static inline的命名空间函数?

1 个答案:

答案 0 :(得分:0)

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

相关问题