나는 C++로 작성된 클래스 세트를 가지고있다. Perl 스크립트에서 호출하는 가장 좋은 방법은 무엇입니까? 감사.Perl에서 C++ 클래스를 사용하려면 어떻게해야합니까?
답변
나는 특히 SWIG를 선호하지 않으며 직접 인터페이스 코드를 작성하는 것을 선호합니다. Perl은 C 또는 C++에 인터페이싱하기 위해 'XS'라고하는 일종의 의사 언어를 제공합니다. 불행히도, 그것을 사용하려면 적어도 C, Perl을 알아야하며, 인터프리터 API에 대해서도 배워야합니다. Perl과 C가 이미 잘 알고 있다면 과 같은 큰 단계가 아닙니다. XS에 다음과 같은 핵심 문서에서보세요 :
또한, 튜토리얼의 많음이있다 그리고 인터넷에서의 방법.
이제 XS를 사용하여 C++에 인터페이스하려면 몇 가지 추가 단계가 필요합니다. 처음에 해결하기는 다소 실망 스럽지만 일단 얻으면 깔끔하게 정리됩니다. 이와 관련하여 핵심 문서는 기껏해야 희소식입니다. 그러나 모든 것이 사라지지 않습니다. Perl의 wxWidgets 바인딩 생성자 인 Mattia Barbon은이 도구를 "XS ++"라고 불렀습니다.이 도구는이 도구를 간단하게 (또는 XS만큼 간단하게) 만듭니다. Wx에 포함되어 있지만, 우리는 자체 배포본으로 분할하는 작업을하고 있습니다. 이것은 진행중인 작업입니다. github에 Mattia's XS++ code 및 modified version of mine이 있습니다.
CPAN에 독립 XS ++의 릴리스 없다면, 나는 다른 자원에서 C++에 대한 XS를 쓰기 학습 제안 :
- 아주 오래 전, 존 카이저는 우수한 tutorial on XS and C++을 썼다. 또한 유용한 도구 및 설명서에 대한 추가 정보를 제공합니다.
- 나는이 튜토리얼과 CPAN에서 찾은 몇 가지 예제에서 XS & C++을 배웠다. 내가 본 것을 기억하지 못한다. 그러나 지금은 (좋거나 나쁘다고 나도 몰라) 예 : Math::SymbolicX::FastEvaluator으로 자신의 일을 가리킬 수 있습니다.
- 마찬가지로 계획된 XS ++ 배포판에는 XS ++를 사용하여 C++ 및 Perl을 인터페이스하는 complete (albeit pointless) example이 포함되어 있습니다. XS ++는 일반 XS로 변환되므로 에 예제를 생성하는 데 사용할 수 있습니다.
추신 : 또한 인라인 :: CPP 모듈이 있습니다. 그게 효과가 있다면, 아마도 가장 쉬운 해결책 일 것입니다. 하지만 템플릿을 처리 할 수 있을지는 의문입니다.
확인 http://www.swig.org는 :
"꿀꺽 꿀꺽는 높은 수준의 프로그래밍 언어의 다양한 ++ C 와 C로 작성된 프로그램을 연결하는 소프트웨어 개발 도구 입니다 꿀꺽 꿀꺽 언어의 서로 다른 종류의 을 사용한다. Perl, PHP, Python, Tcl 및 Ruby와 같은 일반적인 스크립팅 언어 을 포함합니다.
일반적으로 tsee처럼 XS를 선택하지만 Inline::C (또는이 경우 Inline::CPP)도 있습니다.나는 SWiG를 싫어하고 주변에 포장 된 패키지를 피하는 경향이 있습니다.
- 1. 파이썬에서 C++ 클래스를 사용하려면 어떻게해야합니까?
- 2. Perl에서 비동기 프로그래밍을 사용하려면 어떻게해야합니까?
- 3. Perl에서 임의의 길이 정수를 사용하려면 어떻게해야합니까?
- 4. Perl에서 소켓을 사용하려면 어떻게해야합니까? 모듈이 있습니까?
- 5. Perl에서 변수를 모듈 이름으로 사용하려면 어떻게해야합니까?
- 6. 변수를 Perl에서 변수 이름으로 사용하려면 어떻게해야합니까?
- 7. VBA에서 .NET 클래스를 사용하려면 어떻게해야합니까? 구문 도움말!
- 8. GWT의 UiBinder에서 CSS 의사 클래스를 사용하려면 어떻게해야합니까?
- 9. C#에서 난수를 사용하려면 어떻게해야합니까?
- 10. Perl에서 변수의 값을 glob 패턴으로 사용하려면 어떻게해야합니까? 펄에서
- 11. WebClient에서 쿠키를 사용하려면 어떻게해야합니까?
- 12. Visual Studio 2010의 동일한 솔루션에서 다른 프로젝트의 클래스를 사용하려면 어떻게해야합니까?
- 13. 컬의 AsynchDNS를 사용하려면 어떻게해야합니까?
- 14. gitscc에 후크를 사용하려면 어떻게해야합니까?
- 15. Perl에서 외부 프로그램을 실행하려면 어떻게해야합니까?
- 16. 'htonl'을 사용하려면 어떻게해야합니까?
- 17. QProcess에서 대기열을 사용하려면 어떻게해야합니까?
- 18. C++ 내 기능을 효율적으로 사용하려면 어떻게해야합니까?
- 19. C++ ifstream 멤버에 getline을 올바르게 사용하려면 어떻게해야합니까?
- 20. C++/CLI 프로젝트에서 코드 계약을 사용하려면 어떻게해야합니까?
- 21. Cstring에서 다음 토큰을 int로 사용하려면 어떻게해야합니까? (C++)
- 22. C++에서 중첩 벡터를 사용하려면 어떻게해야합니까?
- 23. C++에서 임의의 문자열을 잠금으로 사용하려면 어떻게해야합니까?
- 24. Managed C++에서 Ruby 1.9를 사용하려면 어떻게해야합니까?
- 25. 파이썬 코드를 C++ 응용 프로그램에서 사용하려면 어떻게해야합니까?
- 26. XAML에서 C#의 메서드를 사용하려면 어떻게해야합니까?
- 27. Perl에서 다운로드를 재개하려면 어떻게해야합니까?
- 28. Perl에서 XML을 만들려면 어떻게해야합니까?
- 29. ListBox를 기본 클래스로 사용하려면 어떻게해야합니까?
- 30. AOP (aspect oriented programming)에서 싱글 톤 클래스를 사용하려면 어떻게해야합니까?
약간의 언급을 잊어 버렸습니다. John Keizer의 튜토리얼에는 Dean Roehrich의 CPAN 디렉토리에 대한 링크가 있습니다. 링크가 부실 CPAN 미러에 있습니다. 이것을 대신 사용해보십시오 : http://search.cpan.org/CPAN/authors/id/DMR/ – tsee
XS ++는 ExtUtils :: XSpp to CPAN으로 출시되었습니다 : http://search.cpan.org/dist/ExtUtils-XSpp 아직 초기 단계이지만 Wx.pm을 성공적으로 구축했습니다. – tsee