gpt4 book ai didi

python - 在 python 中使用 "using std::vector"时出现 SWIG 参数错误

转载 作者:搜寻专家 更新时间:2023-10-31 02:15:47 24 4
gpt4 key购买 nike

这与this 非常相关问题

不管这是否是编码实践,我都遇到过这样的代码

test.hh

#include <vector>                                                                                   
using std::vector;

class Test
{
public:
vector<double> data;
};

我正在尝试使用 swig3.0 使用以下接口(interface)文件来解决这个问题

测试.i

%module test_swig                                                                

%include "std_vector.i"

namespace std {
%template(VectorDouble) vector<double>;
};

%{
#include "test.hh"
%}

%naturalvar Test::data;
%include "test.hh"

以及下面的测试代码

测试.py

t = test.Test()                                                              
jprint(t)
a = [1, 2, 3]
t.data = a # fails

这样做会给我以下错误

in method 'Test_data_set', argument 2 of type 'vector< double >'

这可以通过更改 using std::vector 来解决。在 test.hh 到 using namespace std或者删除 using std::vector和改变vector<double>std::vector<double> .这不是我想要的。

问题是我得到的是这个代码。我不允许进行更改,但我仍然应该通过 SWIG 在 python 中提供所有内容。这里发生了什么?

提前致谢。

最佳答案

对我来说,这看起来像 SWIG 不正确支持 using std::vector; 语句。我认为这是一个 SWIG 错误。我可以想到以下解决方法:

  • using namespace std; 添加到 SWIG 接口(interface)文件(这只会影响创建包装器的方式;using 语句不会进入 C++ 代码)
  • #define vector std::vector 添加到 SWIG 接口(interface)文件(这仅在 vector 从未用作 std::vector)
  • 将声明从头文件复制到 SWIG 接口(interface)文件,并将 vector 更改为 std::vector。这将导致 SWIG 生成正确的包装器,并且不会再次影响 C++ 库代码。

关于python - 在 python 中使用 "using std::vector"时出现 SWIG 参数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38111942/

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