C++ SWIG和C++;建设者

C++ SWIG和C++;建设者,c++,constructor,swig,C++,Constructor,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"

我想我一定错过了什么,希望有人能帮我。 假设我用下面的构造函数声明了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不会查看给定给函数的参数类型来确定要调用哪个函数(忽略方法分派)。所以我认为你不能让python做你想做的事情。另一方面,Swig在意识到过载时可以帮助您。如果同时重载append(),则可以得到所需的内容


可能还有另一个更简洁的解决方案,但这似乎对我有效。

看起来Python不支持隐式转换(或者SWIG不将隐式构造函数转换为隐式转换),谢谢,这正是我所担心的,如果SWIG提供了一种宏,用于扩展C++方法签名列表的多个方法扩展,比如告诉SWIG %%扩展{ValueAppEnter(CPPPyType),{…},您知道这是可能的吗?
class Value {
public:
  Value() { }
  Value(const char *val) { }
  void append(const Value &val) { }
  void append(const char *val) { }
};