如果我正在为Python 3进行编译,我有一些使用PyInt需要使用PyInt的字体图。我尝试这样做:
#if PY_VERSION_HEX >= 0x03000000
%typemap(in) ssize_t {
$1 = PyLong_AsSsize_t($input);
}
#else
%typemap(in) ssize_t {
$1 = PyInt_AsSsize_t($input);
}
#endif
(在此示例中,ssize_t
是类型定义的整数类型。)
然而,这需要第二个分支,然后抱怨没有定义PyInt(因为Python 2中不存在PyInt)。
答案 0 :(得分:2)
宏PY_VERSION_HEX
仅在编译代码(包括python头)时定义,但在SWIG解析代码时不定义。您可以改用以下内容:
%typemap(in) ssize_t {
%#if PY_VERSION_HEX >= 0x03000000
$1 = PyLong_AsSsize_t($input);
%#else
$1 = PyInt_AsSsize_t($input);
%#endif
}
编辑:抱歉,需要解决问题。 %#...
语法告诉SWIG预处理器逐字复制代码。