【发布时间】:2017-09-18 20:07:28
【问题描述】:
我有一个可以称为x(const std::string &a, bool b=true) 或x(const SomeClass &object, bool b=true) 的C++ 方法。
在 Python 中,我可以使用 x('Hello', True) 和 x('Hello') 和 x(someObject, True) 调用 SWIG 包装器。
但是,如果我尝试 x('Hi', 'Hello') swig 之类的操作,不会将 'Hello' 转换为布尔值,所以我会得到 NotImplementedError: Wrong number or type of arguments for overloaded function。
如果存在,我如何告诉它将第二个参数转换为 bool?
--- 更新 ------------------------------------------- ------------
https://github.com/swig/swig/blob/master/CHANGES#L1527-L1581
上面的链接似乎表明这是现在想要的行为,尽管它“当然”可以用类型映射来改变......?
【问题讨论】:
-
在您的 C++ 代码中,使用
x("Hi", "Hello")调用X(const std::string&, bool)会起作用,因为 string-literals 可以隐式转换为bool。 SWIG 没有考虑到这一点,也不应该考虑到这一点。添加正确的X(const std::string&, const std::string&)重载并再次生成绑定.. -
重点是 Python 程序中的第二个参数应该被允许为
if(b):将持有的任何东西。我无法为每种可能的类型添加正确的重载! -
我想我现在明白你的问题了。如何编写自定义“类型映射”并将其应用于特定的函数签名。或extending it
-
谢谢!据我所见,类型映射仅处理单个参数,因此您无法将其与特定签名匹配