2010-12-18 2 views
3

저는 PerlXS를 사용하여 C++ 객체 주위에 펄 래퍼를 작성했습니다. 보통 my fcn은 문자열/int 등을 취하는데 아무 문제없이 만들 수 있습니다. 나는 .xs 파일에 다음과 같은 코드를 작성한다.PERL XS를 사용하여 STL 벡터를 사용하는 C++ 함수를 호출하는 방법

MyClass::func_a(std::string a, int b); 

이번에는;

conversion from `SV*' to non-scalar type 
    `std::vector<std::string, std::allocator<std::string> >' 

답변

4

당신은 직접 STL 컨테이너를 취하는 기본 함수를 호출 할 수 없습니다 나는 STL 벡터 I이 오류가

MyClass::func_a(std::vector<std::string> vector) 

에서받는 함수를 할 필요가있다. 래퍼를 작성하고 SV *를 STL 컨테이너로 수동 변환해야합니다.

당신은 (내가처럼)이 작업을 수행하는 방법을 모르는 경우

, 네이티브 funciton는 PERL과 XS-발전기를 포함하는 스크립트 언어 (에서 그것을 사용하는 것이 래퍼를 생성 할 수 있습니다 꿀꺽 꿀꺽 http://www.swig.org/

를 사용하려고). SWIG의 코드는 매우 아름답 지 않으며 몇 가지 제한이 있지만 래퍼를 작성하는 쉬운 방법입니다. 또한 http://www.swig.org/Doc1.3/Library.html#Library_stl_cpp_library

이 PerlXS 및 벡터를 사용하는, ++이 스레드를 XS를 http://www.mail-archive.com/[email protected]/msg00623.html

1

체크 체크 아웃 :

꿀꺽 꿀꺽는 STL의 내장 제한된 지원을하고있다.

일부 링크 :

Slides for my talk at YAPC::EU on XS++

The reference docs

Instructions on how to use in a CPAN distribution

+0

tsee는 XS ++는 자동으로 문자열 – osgx

+0

번호의 벡터와 같은 복잡한 STL 구조 작업 않습니다하지만 사용할 수있는 몇 재사용적인 typemap이있다 CPAN에. ExtUtils :: Typemap 및 ExtUtils :: Typemap :: STL 및 해당 형제를 참조하십시오. 특히 문자열의 벡터가 지원됩니다. 자동 매핑, 재귀 매핑은하지 않습니다. 나는. "벡터의 작동 방식과 문자열의 작동 방식을 알고 있습니다. 즉, 문자열 벡터의 벡터 벡터가 작동하는 방식을 알고 있다는 것을 의미합니다." – tsee