[英]SWIG and C++ constructors
我想我一定在这里想念什么,希望有人能帮忙。 假设我有一个使用以下构造函数声明的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对象。
最好的问候雅各布·西蒙·加尔德
Python不会查看提供给函数的参数类型来确定要调用的函数(忽略方法分派)。 因此,我认为您无法让python做您想要的事情。 另一方面,Swig在意识到超载时可以帮助您。 如果还重载了append(),则可以获得所需的内容。
class Value {
public:
Value() { }
Value(const char *val) { }
void append(const Value &val) { }
void append(const char *val) { }
};
可能还有另一个更整洁的解决方案,但这似乎对我有用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.