使用“时出现SWIG参数错误”;使用std::vector“;用python
这是一个非常相关的问题 无论这是否是编码实践,我都遇到过这样的代码 测试。hh使用“时出现SWIG参数错误”;使用std::vector“;用python,python,c++,c++11,vector,swig,Python,C++,C++11,Vector,Swig,这是一个非常相关的问题 无论这是否是编码实践,我都遇到过这样的代码 测试。hh #include <vector> using std::vector; class Test {
#include <vector>
using std::vector;
class Test
{
public:
vector<double> data;
};
这样做会导致以下错误
in method 'Test_data_set', argument 2 of type 'vector< double >'
在方法“测试数据集”中,参数2的类型为“vector”
这可以通过将test.hh中的使用std::vector
更改为使用命名空间std
或通过删除使用std::vector
并将vector
更改为std::vector
来解决。这不是我想要的
问题是我得到的代码是原样的。我不允许进行更改,但我仍然应该通过SWIG使python中的所有内容都可用。这是怎么回事
提前感谢。对我来说,这看起来好像SWIG不支持使用std::vector的
代码>语句正确。我认为这是一个痛饮虫。我可以想到以下解决办法:
- 使用名称空间std添加
代码>到SWIG接口文件(这只会影响包装的创建方式;使用< /code >语句将不会进入C++代码)
- 将
#define vector std::vector
添加到SWIG接口文件(仅当vector
从未用作std::vector
时,此操作才有效)
- 将声明从头文件复制到SWIG接口文件,并将
vector
更改为std::vector
。这将导致SWIG生成正确的包装,并且不会再次影响C++库代码。
在头文件中使用语句是不允许的,你会发现原因。(或者只是不要通过在头文件中使用全局范围的语句来强制每个人使用)。毫无疑问,我同意Flexo。这可能是处理这个问题的最好办法,但不幸的是,这不是问题所在。就m7thon的响应而言,第一个项目符号似乎覆盖了h文件中使用std::vector的。很不错的!其他的选项是不确定的,但我会把它算作关闭的,因为第一个项目符号。第三点(复制和自定义声明)在某种意义上是“正确”的方式,并保证工作。使用%include“test.hh”
确实是头文件可以按原样使用的快捷方式。前两点是黑客,但如果它们奏效…;-)
t = test.Test()
jprint(t)
a = [1, 2, 3]
t.data = a # fails
in method 'Test_data_set', argument 2 of type 'vector< double >'