我试图通过引用C ++模板方法来传递向量,但我得到的只是一个空列表,显然该参数是按值传递的。
我正在使用Cython 0.18& Python 2.7
有什么想法吗?
C ++方
class VectByRef
{
public:
VectByRef::VectByRef();
template<typename T>
void GetVector(T& var);
}
template<typename T>
void VectByRef::GetVector(T& var)
{
var.push_back(1);
var.push_back(2);
var.push_back(3);
}
Cython方
cdef extern from "VectByRef.h":
cdef cppclass VectByRef:
VectByRef() except
vector[cython.int] GetVector(vector[cython.int])
def getVector(self):
cdef vector[cython.int] resultVectInt
self._vectByRef.GetVector(<vector[cython.int]> resultVectInt)
print(resultVectInt) # The result is an empty list []
答案 0 :(得分:1)
我不确定这实际上是否回答了这个问题,但我还没有发表评论以澄清问题。
当我尝试编译时,我收到了一个错误:
error: no matching function for call to ‘VectByRef::GetVector(std::vector<int>)’
通过将Cython端的调用更改为
来解决错误.GetVector(<vector[cython.int]&> resultVectInt)
完全删除类型资格也有效:
.GetVector(resultVectInt)
这两个也给出了期望的结果:[1, 2, 3]
这也是使用Python 2.7,同时使用Cython 0.17和0.19。所以我猜其他东西正在发生,或者有0.18的特定错误。