Я думаю, что мне что-то не хватает, надеюсь, кто-то может помочь. Скажем, у меня есть класс C++ объявленного со следующими конструкторами:Конструкторы SWIG и C++
class Value {
public:
Value();
Value(const char *val);
void append(const Value &val);
private:
...
};
После создания простого SWIG интерфейс файла, что-то вроде:
%module(naturalvar=1) Value
%{
#include "value.h"
%}
%include "value.h"
и создания коды оболочки для Python, я могу сделать это:
>>> import Value
>>> v1 = Value.Value()
>>> v2 = Value.Value("test")
>>> v1.append(v2)
>>> v1.append(Value.Value("test"))
, но я не могу это сделать:
>>> v1.append("test")
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
/home/jakob/dev/test/Value.py in append(self, *args)
298 def resize(self, *args): return _Value.Value_resize(self, *args)
299 def isValidIndex(self, *args): return _Value.Value_isValidIndex(self, *args)
--> 300 def append(self, *args): return _Value.Value_append(self, *args)
301 def get(self, *args): return _Value.Value_get(self, *args)
302 def removeMember(self, *args): return _Value.Value_removeMember(self, *args)
TypeError: in method 'Value_append', argument 2 of type 'Value const &'
Очевидно, что он знает, как использовать конструктор Value (const char * value), но как я могу понять, что строка, переданная методу append, должна быть передана/преобразована в объект Value.
С наилучшими пожеланиями Jakob Simon-Gaarde
Похоже, что Python не поддерживает неявные преобразования (или SWIG не превращает неявные конструкторы в неявные преобразования) –