Я думаю, что я что-то здесь упускаю, я надеюсь, что кто-то может помочь.Допустим, у меня есть класс 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), но как мне сделатьон понимает, что строка, переданная методу добавления, должна быть передана / преобразована в объект Value.
С наилучшими пожеланиями, Jakob Simon-Gaarde