Я пытаюсь написать карту типов, которая преобразует несколько аргументов / переменных в один входной параметр.
Например, скажем, у меня есть функция, которая принимает вектор.
void foo(vector<int> x);
И я хочу назвать это так (случается в Perl)
foo(1,2,3,4);
Карта типов должна принимать аргументы ($ 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, что нужно подавить arg2 из вызова foo?
Я не могу использовать это в моем .i:
void foo(...)
потому что я хочу, чтобы у меня были разные карты типов, в зависимости от типов, которые ожидает foo (массив int, строки, что угодно). Может быть, есть способ дать тип "..."
Есть ли способ сделать это?