Lua を C++ クラスに埋め込んでいます。
tolua++ は、クラスのオーバーロードされた演算子を無視しているようです。
tolua++ は次の警告を発行します。
- **tolua++ 警告: operator= はサポートされていません。無視します
- **tolua++ 警告: 演算子!= はサポートされていません。無視します
これを回避する方法はありますか?
私は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
存在しないキーに値を割り当てようとすると呼び出されます)