複数/可変引数を 1 つの入力パラメーターに変換する typemap を作成しようとしています。
たとえば、ベクトルを受け取る関数があるとします。
void foo(vector<int> x);
そして、私はそれをこのように呼びたいです(たまたまPerlにあります)
foo(1,2,3,4);
typemap は引数 ($argnum, ...) を取り、それらを 1 つのベクトルに集めてから、それを foo に渡す必要があります。
私はこれまでのところこれを持っています:
typedef vector<int> vectori;
%typemap(in) (vectori) {
for (int i=$argnum-1; i<items; i++) {
$1->push_back( <argv i> ); // This is language dependent, of course.
}
}
SWIGが引数の数をチェックすることを除いて、これは機能します
if ((items < 1) || (items > 1)) {
SWIG_croak("Usage: foo(vectori);");
}
私が行った場合:
void foo(vectori, ...);
SWIG は、2 つの引数で foo を呼び出すことを期待します。
foo(arg1, arg2);
おそらく、foo の呼び出しから arg2 を抑制するように SWIG に指示する方法はありますか?
.i でこれを使用できません:
void foo(...)
foo が期待しているタイプ (int の配列、文字列など) に応じて、異なるタイプマップが必要なためです。「...」に型を与える方法があるかもしれません。
これを行う方法はありますか?