2012-04-24 84 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反彙編(儘管承認,這只是猜測我的一部分)。屆時,它可能已被轉換爲最終形式。