std::vector
인스턴스를 확장하는 C++ 클래스에 대한 Python 바인딩을 개발 중입니다. 이 클래스에 대한 작업 파이썬 첨자 연산자 나는 다음과 같이 __getitem__
기능을 찾고 추가 얻으려면 (I는 관련이없는 코드와 오류 처리 컷) 다음은 위의 하나의 요소에 액세스하기위한 파이썬의 모든 권리 작동SWIT에서 사용할 C++ __getitem__ 함수에서 슬라이스를 처리하는 방법
class Column;
typedef vector<Column*> MetaDataBase;
class MetaData : public MetaDataBase {
public:
#ifdef SWIGPYTHON
Column* __getitem__(int i) { return (*this)[i]; }
#endif
};
을하지만, 그렇지 않습니다 조각을 위해 일하십시오.
좋아요, 그렇기 때문에 함수의 매개 변수 유형을 PyObject *
으로 변경하고 PySlice_Check
을 사용하여 함수가 PyList
을 반환해야하는지 확인해야합니다.
괜찮습니다. 문제 없습니다. 하지만 때때로 함수에서 PyList
을 반환해야하기 때문에 __getitem__
반환 값의 형식은 PyObject*
이어야하며 SWIG를 사용하여 C++ 유형 (Column *
)을 래퍼 클래스로 변환 할 수 없습니다. 또한 슬라이스를 만들 때 Column*
을 PyObject*
으로 '수동으로 변환'한 다음 PyList에 삽입해야합니다.
어떻게하면됩니까?
% 템플릿 (MetaDataBase) std :: vector; 트릭을 수행했습니다! 나는 방금 내 자신의'__getitem__'을 지우고 모든 것이 매력처럼 작동합니다. - 정말 고마워요! –
piokuc