gpt4 book ai didi

c++ - SWIG 和 C++ 构造函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:33:31 26 4
gpt4 key购买 nike

我想我一定在这里遗漏了一些东西,我希望有人能提供帮助。假设我有一个使用以下构造函数声明的 C++ 类:

class Value {
public:
Value();
Value(const char *val);
void append(const Value &val);
private:
...
};

在创建了一个简单的 SWIG 接口(interface)文件后,类似于:

%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 不会查看提供给函数的参数类型来确定调用哪个函数(忽略方法分派(dispatch))。所以我不认为你可以让 python 做你想做的事。另一方面,当意识到重载时,Swig 可以帮助您。如果你也重载 append() ,你可以得到你想要的。

class Value {
public:
Value() { }
Value(const char *val) { }
void append(const Value &val) { }
void append(const char *val) { }
};

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

关于c++ - SWIG 和 C++ 构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8965956/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com