Передача векторов по ссылке на шаблонный метод

Я ломал голову, пытаясь передать векторы посредством ссылки на метод шаблона 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 []

3

Решение

Я не уверен, что это действительно отвечает на вопрос, но я пока не могу комментировать, чтобы получить разъяснения.

Когда я попытался скомпилировать это, я получил ошибку:

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.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector