2012-04-24 100 views
0

林具有在我痛饮接口文件接口连接的.C/.H对于小GUI库中的以下:痛饮的Lua构件代

%{ 
    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万指针等检查...

+0

Lua不使用分号来表示行的结尾。 – kikito 2012-04-26 00:19:32

回答

0

有没有一种方法(或使用Swig接口或在Lua中)来抑制所有呼叫一个点,只保留一个列?

不是。就Lua而言,它只是语义糖。使用.意味着只需访问该成员。使用:意味着当您调用该函数时,第一个参数是使用:访问的表。

你可能甚至无法分辨检查Lua反汇编(尽管承认,这只是猜测我的一部分)。届时,它可能已被转换为最终形式。