我有一個C++方法,可以調用x(const std::string &a, bool b=true)
或x(const SomeClass &object, bool b=true)
。SWIG中的類型檢查和重載方法
在Python中,我可以用x('Hello', True)
和x('Hello')
和x(someObject, True)
調用SWIG包裝。
但是,如果我嘗試類似x('Hi', 'Hello')
swig不會將'Hello'轉換爲bool,那麼我會得到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&)'重載並重新生成綁定。 – WhiZTiM
重點在於Python程序中的第二個參數應該被允許爲_anything_, '如果(b):'會成立。我無法爲每種可能的類型添加正確的重載! –
我想我現在明白你的問題了。如何編寫自定義「類型映射表」並將其應用於該特定函數簽名?或者[擴展它](https://stackoverflow.com/a/35257318/1621391) – WhiZTiM