我有一个 C++ 方法,可以调用为 x(const std::string &a, bool b=true)
或 x(const SomeClass &object, bool b=true)
.
在 Python 中,我可以使用 x('Hello', True)
和 x('Hello')
以及 x(someObject,正确)
。
但是,如果我尝试类似 x('Hi', 'Hello')
swig 不会将 'Hello' 转换为 bool,所以我得到一个 NotImplementedError: Wrong number或重载函数的参数类型
。
如何告诉它将第二个参数转换为 bool(如果存在)?
--- 更新 ------------------------------------------ -----------
https://github.com/swig/swig/blob/master/CHANGES#L1527-L1581
上面的链接似乎表明这是现在所需的行为,尽管它“当然”可以通过类型映射进行更改......?
最佳答案
您可以为 SWIG 编写一个类型映射,为任何输入调用 Python 对象协议(protocol)函数 PyObject_IsTrue
:
%module test
%typemap(in) bool b "$1=PyObject_IsTrue($input);"
void foobar(bool b=true);
关于python - SWIG 中的类型检查和重载方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46287395/