0

我在 C 中有这个结构:

typedef struct THTensor {
  ...
  ptrdiff_t storageOffset;
  ...
} THTensor;

但是,SWIG 生成的 Java 代码是:

public SWIGTYPE_p_ptrdiff_t getStorageOffset() {
    return new SWIGTYPE_p_ptrdiff_t(THJNI.THFloatTensor_storageOffset_get(this.swigCPtr, this), true);
}

我希望将ptrdiff_t其转换为longJava,而不是 this SWIGTYPE_p_ptrdiff_t,在其中我无法访问实际long值。

如何在 SWIG 中控制它?

4

1 回答 1

1

有几种选择......但ptrdiff_tSWIG 不知道并将其定义long为不是最好的主意。
我会执行以下操作:添加%include <stdint.i>到接口文件,然后在接口文件中添加:

%define ptrdiff_t
intptr_t
%enddef

或者在源代码中添加:

#ifdef SWIG
  %define ptrdiff_t
  intptr_t
  %enddef
#endif // SWIG
...
typedef struct THTensor {
  ...
  ptrdiff_t storageOffset;
  ...
} THTensor;

这样,被包装在接口中的代码应该对 有适当的解释ptrdiff_t,而不仅仅是一个不透明的指针。

于 2017-08-11T21:00:55.860 回答