通过引用传递的C ++ / SWIG类型映射

时间:2016-12-08 18:23:55

标签: python c++ c swig

我有以下想要在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

我没有设法使用(或理解)我发现的类似讨论。

0 个答案:

没有答案