1

LuaSWIGを使用して、IInterface クラスと言って、そのインターフェイスを実装し、すべてを Lua 内でインスタンス化することは可能でしょうか? もしそうなら、それはどのように行われますか?

4

2 に答える 2

1

lua 状態へのポインターと、この API を使用して指定されたテーブルに返される参照を保持することにより、テーブルを c++ クラスに格納します。

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

次に、ラッパー クラスのメソッドが呼び出されると、参照されたオブジェクトをスタックにプッシュし、必要な関数呼び出しを実行します。

于 2010-01-13T15:13:07.157 に答える
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 オブジェクトにラップし、ここで説明されているように「メタタブル」継承を行う必要があります。また、Lua マニュアルのオブジェクト指向プログラミングに関するセクションもお読みください。

于 2009-11-23T11:49:06.527 に答える