繁体   English   中英

SWIG和C ++构造函数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM