2013-04-18 38 views
3

一直试图通过引用传递向量的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

使用'GetVector'方法,为什么要将它定义为'T'的方法,而不是作为'VectByRef'(它被声明为)的方法? – michaelb958

+0

我的不好,现在是固定的,谢谢。 – firebird2099

+1

我也有这个问题。我看到你已经在其他网站上发布了这个信息。你有不同的网站有任何答案吗? – spencerlyon2

回答

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的特定错误。