2009-11-23 73 views

回答

0

存儲爲使用該API指定在C++類的表通過保持一個指針到LUA狀態,並且參考返回的表:

http://www.lua.org/pil/27.3.2.html

然後,當在包裝類的方法被稱爲,推參考對象到堆棧上,並做必要的功能調用

1

首先,C++風格的界面現在對於像Lua這樣的語言來說很有意義。對於符合接口的Lua對象,只需要包含該接口中所有函數的定義。不需要任何特定的繼承。舉例來說,如果你有一個C++接口這樣的:

// Represents a generic bank account 
class Account { 
    virtual void deposit(double amount) = 0; 
}; 

你可以在Lua實現它沒有任何具體的繼承規格:

SavingsAccount = { balance = 0 } 
SavingsAccount.deposit = function(amount) 
    SavingsAccount.balance = SavingsAccount.balance + amount 
end 

-- Usage 
a = SavingsAccount 
a.balance = 100 
a.deposit(1000) 

總之,你並不需要C++接口。如果您需要從Lua擴展C++類的功能,則應該按照所述將它包裝到Lua對象中,並按照here的解釋執行「metatable」繼承。另請閱讀Lua手冊中的section on Object Oriented Programming

+0

我知道本教程,它不實現我想要的。它告訴我,從C++類A繼承的C++類B仍然可以在lua中使用。 但它不會告訴我如何聲明和實例lua類C繼承自C++類B? – 2009-11-23 13:02:40

+0

@Tom J Nowell我已經更新了答案。 – 2009-11-23 13:36:50

+0

嗯,我認爲,這裏的問題是以這種方式實現它,我將不得不使用函數在lua文件中實現它,再加上我自己的基於lua的對象處理程序。我已經有了一個C++對象處理程序,並且我寧願允許我的lua對象在這個現有基礎結構中工作,因爲這樣的額外層會剝去一噸體系結構的東西,從而大大增加區域的開銷。 – 2009-11-24 11:27:34