2

ここで tolua++ と __tostring の使用を手伝ってくれる人はいますか?

C++ オブジェクトからバインドされた Lua オブジェクトのメタテーブルに __tostring プロパティを設定しようとすると、クラッシュします。

例えば

local x = foo.new() -- foo bound from tolua++
getmetatable(x).__tostring = function(t) end

...クラッシュを引き起こします。

__eq など、既に存在するメタテーブル関数を設定しても問題ないようですが、__tostring や 'foobar' など、まだ存在しない関数を設定すると、クラッシュが発生します。

4

1 に答える 1

0

私は自分の質問に対する解決策を見つけたと思います...

tolua を使用して、C++ 基本クラスから "__tostring" という関数を簡単にバインドできます。これはクラスのメタテーブルに表示されるため、そのクラスのオブジェクトが出力されると、Lua から (予想どおり) 呼び出されます。

さらに、問題なく Lua 側の関数を置き換えることができます (たとえば、getmetatable(foo).__tostring = somenewfunction を使用)。

__tostring 関数が明示的にバインドされていない場合にクラッシュが発生する理由を知りたい

于 2013-03-03T20:51:31.627 に答える