2013-04-18 1 views
3

C++ 템플릿 메서드에 대한 참조로 벡터를 전달하려고 시도했지만 저의 머리를 깨뜨린 것은 모두 빈 목록입니다. 매개 변수가 값에 의해 전달되고있는 것 같습니다.템플릿 메서드를 참조하여 벡터를 전달합니다.

나는 사이 썬 0.18 & 파이썬 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); 
} 

사이 썬 측

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' 메쏘드를 사용하면,'VectByRef'의 메쏘드 대신에'T' 메쏘드로 정의하는 이유는 무엇입니까? – michaelb958

+0

내 잘못 됐어, 이제 고쳐 졌어, 고마워. – firebird2099

+1

나는 또한이 질문이있다. 나는 당신이 다른 사이트에 이것을 게시 한 것을 본다. 다른 사이트에서 답변을 얻었습니까? – spencerlyon2

답변

1

나는이 실제로 질문에 대한 대답 모르겠지만, 나는 설명을 얻을 아직 말씀 드릴 수 없습니다. 모두의 종류도 자격을 제거

.GetVector(<vector[cython.int]&> resultVectInt) 

error: no matching function for call to ‘VectByRef::GetVector(std::vector<int>)’

오류가 사이 썬 측의 호출을 변경하여 해결되었습니다 : 나는 오류를 가지고이 컴파일을 시도

근무한 :

.GetVector(resultVectInt) 

Bot h는 원하는 결과를 얻었습니다. [1, 2, 3]

또한 Cython이 모두 0.17 & 0.19 인 Python 2.7을 사용했습니다. 그래서 나는 다른 일이 진행되고 있거나 0.18의 특정 버그가 있다고 추측합니다.

관련 문제