Ich habe eine C++ - Methode, die als x(const std::string &a, bool b=true)
oder als x(const SomeClass &object, bool b=true)
aufgerufen werden kann. In Python kann ich die SWIG Wrapper mit x('Hello', True)
und x('Hello')
und x(someObject, True)
aufrufen.Typ Überprüfung und überladene Methoden in SWIG
Allerdings, wenn ich etwas wie x('Hi', 'Hello')
swig versuchen konvertieren nicht 'Hallo' zu einem bool, so bekomme ich eine NotImplementedError: Wrong number or type of arguments for overloaded function
.
Wie kann ich sagen, dass das zweite Argument in bool konvertieren soll, wenn vorhanden?
--- Aktualisierung ------------------------------------------ ------------
https://github.com/swig/swig/blob/master/CHANGES#L1527-L1581
der obige Link scheint das gewünschte Verhalten ist dies nun vorschlagen, obwohl es natürlich "kann mit einem typemap geändert werden ...?
In Ihrem C++ Code würde der Aufruf von 'X (const std :: string &, bool)' mit 'x (" Hallo "," Hallo ")' funktionieren, weil * String-Literale * implizit in 'bool umwandelbar sind '. SWIG berücksichtigt dies nicht und sollte dies auch nicht tun. Fügen Sie eine korrekte Überladung von 'X (const std :: string &, const std :: string &)' 'hinzu und generieren Sie Ihre Bindungen erneut. – WhiZTiM
Der Punkt ist, dass das zweite Argument in einem Python-Programm _anything_ sein darf, für das 'Wenn (b):' würde halten. Ich kann keine korrekte Überladung für jeden möglichen Typ hinzufügen! –
Ich glaube ich verstehe dein Problem jetzt. Was ist mit dem Schreiben einer benutzerdefinierten "typemap" und der Anwendung auf diese spezifische Funktionssignatur? Oder [es erweitern] (https://stackoverflow.com/a/35257318/1621391) – WhiZTiM