1

Lua を C++ クラスに埋め込んでいます。

tolua++ は、クラスのオーバーロードされた演算子を無視しているようです。

tolua++ は次の警告を発行します。

  • **tolua++ 警告: operator= はサポートされていません。無視します
  • **tolua++ 警告: 演算子!= はサポートされていません。無視します

これを回避する方法はありますか?

4

1 に答える 1

4

私はtolua++に精通していませんが、どちらもサポートしないことは理にかなっています。tolua ++は丁寧に通知しているだけなので、コードが効果を発揮しているとは思わないでしょう。

代入演算子はLuaのコンテキストでは意味がなく~=演算子はの否定で==あるため、実装はLuaオブジェクトとoperator==の両方==を処理します。~=

編集:このスペースを使用して、以下に提示された質問に答えて、コードを含めることができます:

確かに、それは不等式の関係を説明していますが、割り当てはどうですか?

Luaでは、変数は型指定されておらず、値の名前にすぎません。代入演算子は、任意のタイプの新しい値をその名前に関連付けます。名前に関連付けられた以前の値は変更されません(たとえば、値はメモリ内のどこかに変更されずに存在し、それ以上参照されない場合はガベージコレクションを待機します)存在)。グローバル変数の割り当ての意味を考えてみましょう。

print(math) --> table: 00516620
math = "foo"
print(math) --> foo

その2行目は次と同等です。

_G.math = "foo"

言い換えると、math=valの値を置き換えるので、数学オブジェクト_G["math"]をオーバーライドすることを意味しますか?operator=何もない。

代入演算子の変更に最も近いのはメタメソッド__newindexです。これはテーブル/ユーザーデータにのみ適用されるため、ローカルには影響しません。このmath="foo"例の場合、__newindexはオンで_Gはなくmath、この場合_G.mathは既存の値があるため呼び出されません(__newindex存在しないキーに値を割り当てようとすると呼び出されます)

于 2010-12-23T11:31:05.323 に答える