我正在尝试编写一个类型映射,将多个/可变参数转换为一个输入参数。
例如,假设我有一个带有向量的函数。
void foo(vector<int> x);
我想这样称呼它(恰好在Perl中)
foo(1,2,3,4);
typemap 应该接受参数 ($argnum, ...),将它们收集到一个向量中,然后将其传递给 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 将期望使用两个参数调用 foo。
foo(arg1, arg2);
也许有一种方法可以告诉 SWIG 从对 foo 的调用中抑制 arg2?
我不能在我的 .i 中使用它:
void foo(...)
因为我想有不同的类型映射,这取决于 foo 期望的类型(一个 int、字符串等的数组)。也许有一种方法可以给“...”一个类型
有没有办法做到这一点?