Более простой способ создать карту типов SWIG для функции с несколькими аргументами?

Вот функция C ++, которую я хочу обернуть, используя SWIG.

static void my_func(t_string name, t_string value)
{
do_something(name, value);
}

А вот и карты типов SWIG.

%typemap(in) (t_string name)
{
if (!lua_isstring(L, $input)) {
SWIG_exception(SWIG_RuntimeError, "argument mismatch: string expected");
}
$1 = lua_tostring(L, $input);
}

%typemap(in) (t_string value)
{
if (!lua_isstring(L, $input)) {
SWIG_exception(SWIG_RuntimeError, "argument mismatch: string expected");
}
$1 = lua_tostring(L, $input);
}

Таким образом, я мог бы успешно использовать my_func в Луа.

Но мне интересно, есть ли какое-нибудь более простое решение, чем это, так как 2 приведенные выше карты типов идентичны, но используют только другое имя.

Скажем, если у меня позже есть функция C ++, которая принимает 3 t_string аргументы, тогда я должен добавить еще одну карту типов, используя другое имя?
Или было бы более простое решение?

0

Решение

Ты делаешь это неправильно. Вы используете карту с несколькими аргументами для одного типа. Удалите имя переменной (и, возможно, скобки) из t_string, Это подробно объясняется в разделе о сопоставление с образцом в главе для типографских документов документации.

%module typemaptest

%typemap(in) t_string
{
if (!lua_isstring(L, $input)) {
SWIG_exception(SWIG_RuntimeError, "argument mismatch: string expected");
}
$1 = lua_tostring(L, $input);
}

void my_func(t_string name, t_string value);
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]