Вот функция 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
аргументы, тогда я должен добавить еще одну карту типов, используя другое имя?
Или было бы более простое решение?
Ты делаешь это неправильно. Вы используете карту с несколькими аргументами для одного типа. Удалите имя переменной (и, возможно, скобки) из 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);
Других решений пока нет …