python - SWIG 中的类型检查和重载方法

标签 python c++ swig

我有一个 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/

相关文章:

python - numpy.i 是将实际指针发送到 C++,还是复制内存?

python - 如何从另一个函数内部执行字符串内部的函数?

c++ - 如何检查对象是否已在 C++ 中初始化/创建?

c++ - 从字符串中提取整数

c++ - 从线程使用 v8 句柄失败

c++ - 为我的 c/c++ 库痛饮、soap 或 restful

python - SWIG 将 C 库连接到 Python(SWIG 生成的类使用起来很麻烦)

python - Flask Limiter - 对一个端点使用多个 key_func

python - 有没有好的 Python 图表库?

python - 有什么方法可以更改寄存器的 Django-rest-auth View 吗?