我在我的 Swig 接口文件中有以下内容,用于连接一个小型 GUI 库的 .c/.h:
%{
void Widget_name_set( Widget *widget, char *name )
{
if( !name ) return;
WidgetSetName( widget, name );
}
char *Widget_name_get( Widget *widget )
{
return WidgetGetName( widget );
}
%}
struct Widget
{
%extend
{
char name[ 32 ];
Widget( void )
{
return WidgetNew();
}
~Widget()
{
if( $self ) WidgetDelete( $self );
}
void SetName( char *name )
{
Widget_name_set( $self, name );
}
char *GetName()
{
return Widget_name_get( $self );
}
}
};
然后我使用接口文件生成一个 Lua 包装器。如果我在 Lua 中调用以下命令,结果几乎与预期一样:
w = Widget();
w:SetName("test");
一切都好。但如果我这样做:
w = Widget();
w.SetName( nil, "test" );
由于参数为零,它显然会崩溃。有没有办法(使用 Swig 接口或在 Lua 中)来抑制所有带点的调用,只保留带列的调用?像这样对用户来说会更容易,并且会避免我添加 1000 万个指针检查等......