3

私はPerlXSを使用してC++オブジェクトの周りにperlラッパーを記述しています。通常、私のfcnはstring / intなどを取り込んでおり、問題なく作成できます。.xsファイルにこのようなコードを書くだけです

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

今回; stlベクトルを取り込む関数が必要です

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

このエラーが発生します:

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

2 に答える 2

4

STLコンテナを受け取るネイティブ関数を直接呼び出すことはできません。ラッパーを作成し、SV*を手動でSTLコンテナーに変換する必要があります。

(私のように)これを行う方法がわからない場合は、SWIGhttp://www.swig.org/を使用してみてください。

ネイティブ関数のラッパーを生成して、スクリプト言語(PERLおよびXSジェネレーターを含む)から使用できます。SWIGのコードはあまり美しくなく、いくつかの制限もありますが、ラッパーを作成する簡単な方法です。

SWIGはSTLビルトインの限定的なサポートを持っています:http ://www.swig.org/Doc1.3/Library.html#Library_stl_cpp_library

また、PerlXSとベクターの使用については、このスレッドhttp://www.mail-archive.com/perl-xs@perl.org/msg00623.htmlを確認してください。

于 2010-12-18T04:37:18.140 に答える
2

XS++をチェックしてください。

いくつかのリンク:

XS++のYAPC::EUでの私の講演のスライド

リファレンスドキュメント

CPANディストリビューションでの使用方法に関する説明

于 2010-12-18T21:36:49.907 に答える