swig 3.0.1、python 3 和布尔数据类型
我正在更新我的绑定,以支持 swig 3.0.1,但在调用一个需要布尔值的函数时出现了错误(在 2.0.9 版本时没有这个问题)……具体来说:
类型错误:在方法 'MClass_setStatus' 中,第二个参数的类型应该是 'bool'
有没有人能告诉我到底发生了什么变化?
2 个回答
0
你可以用一种不同但兼容的方式来导出你的函数。在你的情况下,可以把你的函数声明为接受整数(int)而不是布尔值(bool)。SWIG会为整数生成包装代码,但编译器在C++层面会调用你的布尔值函数(除非你有重载)。在Python中没有重载,所以我不确定如果你传入布尔值作为调用参数,SWIG的包装代码是否会报错。SWIG可能不喜欢隐式的整数转布尔值,但可能会接受隐式的布尔值转整数。
1
我需要向后兼容,所以这个选项不行。我可以通过在swig命令行上加上-D SWIG_PYTHON_LEGACY_BOOL来让它的行为变成以前的样子。