我有以下想要在Python中使用的C ++代码。包装是用SWIG制作的。
标题文件:
#ifndef FSINDEXTRANSFORM_H
#define FSINDEXTRANSFORM_H
class FSIndexTransform
{
public:
typedef int IndexVec3;
void Transform(const IndexVec3 indices, const IndexVec3 begin1, const IndexVec3 begin2, IndexVec3& result) const;
};
#endif
源文件:
#include <iostream>
#include "FSIndexTransform.h"
void FSIndexTransform::Transform(const IndexVec3 indices,
const IndexVec3 begin1,
const IndexVec3 begin2,
IndexVec3& result) const
{
std::cout << "OK" << std::endl;
}
SWIG标题:
%module FSIndexTransform
%{
#include "FSIndexTransform.h"
%}
%include "FSIndexTransform.h"
我正在尝试使用生成的Python模块,如下所示:
from FSIndexTransform import FSIndexTransform
transform = FSIndexTransform()
transform.Transform(1, 2, 3, 4)
根据SWIG documentation, const IndexVec3 和 IndexVec3&amp; 参数应以相同的方式处理。但这不是我观察到的行为:
Traceback (most recent call last):
File "test.py", line 13, in <module>
transform.Transform(1, 2, 3, 4)
File "/projects/fsdm/dev/st15435/FlowSim/FSDM/trunk/test_fsindextransform/bin/FSIndexTransform.py", line 101, in Transform
return _FSIndexTransform.FSIndexTransform_Transform(self, indices, begin1, begin2, result)
TypeError: in method 'FSIndexTransform_Transform', argument 5 of type 'FSIndexTransform::IndexVec3 &'
在查看FSIndexTransform_wrap.cpp时,可以看到所有参数的翻译方式不同:
FSIndexTransform::IndexVec3 arg2 ;
FSIndexTransform::IndexVec3 arg3 ;
FSIndexTransform::IndexVec3 arg4 ;
FSIndexTransform::IndexVec3 *arg5 = 0
我没有设法使用(或理解)我发现的类似讨论。