Luaバインディング:テーブルとユーザーデータ
-
07-07-2019 - |
質問
C ++クラスのLuaバインディングを作成する場合、テーブルまたはuserdataオブジェクトを返す必要がありますか?
各メソッドの長所と短所を知っている人はいますか?
解決
ユーザーデータを返すことをお勧めします。アプローチに関係なく、ポインタを置く場所が必要です C ++データ、または実際のC ++データ自体に、どこにもありません これをテーブルで安全に行うことができます。
テーブルを返すことは、いくつかの状況で意味があります。 Luaで追加の属性を使用して「注釈」を付ける これをサポートするための特別なもの。残念ながら、C ++オブジェクトポインター どこかに行かなければならず、他に行くのに賢明な場所はありません テーブル自体の実際のエントリよりも。
ここは安全な場所ではありません。 Luaで見つけることができます コード、および削除または置換。これは偶然かもしれません 目的、それは本当に重要ではありません。
したがって、私の好みはユーザーデータオブジェクトを返すことです。彼らはすることができます 本当にそれを主張しなければならない場合、テーブルのように動作するようにしましたが、 「秘密」もありますC ++の領域(実際のユーザーデータ自体) Luaコードによる上書きから安全にオブジェクトポインターを保存できます。
(Userdataオブジェクトには、別の" environment"ポインターもあります オブジェクト固有のデータを保存する場所。ユーザーデータのペイロードと同様 それ自体、この値はLuaコードからアクセスできず、破損することはありません そのように。)
所属していません StackOverflow