私は luabind を学んでおり、luabind::object を使用して C++ から Lua の変数にアクセスしようとしています。
「オブジェクト」に int を代入すると、コンパイルが失敗しました。
コード:
int main()
{
using namespace luabind;
lua_State *L;
L = luaL_newstate();
luaL_openlibs(L);
open(L);
luaL_dofile(L, "./test.lua"); // a = 5
object g = globals(L);
object num = g["a"];
num = 6; // Failed to compile
return 0;
}
エラーメッセージ:
luatets.cpp:21:6: error: no match for ‘operator=’ (operand types are ‘luabind::adl::object’ and ‘int’)
num = 6;
/usr/include/luabind/object.hpp:731:9: note: luabind::adl::object& luabind::adl::object::operator=(const luabind::adl::object&)
class object : public object_interface<object>
/usr/include/luabind/object.hpp:731:9: note: no known conversion for argument 1 from ‘int’ to ‘const luabind::adl::object&’
しかし、2 行を結合した後、コードは機能しました。
g["a"] = 6;
なぜこれが起こったのかわかりません。luabind のドキュメントでは、次のように述べられています。
Lua オブジェクトがある場合は、代入演算子 (=) を使用して新しい値を代入できます。これを行うと、default_policy を使用して C++ 値から Lua への変換が行われます。
また、クラス宣言では、object& だけでなく、任意の型に対して代入演算子がオーバーロードされます。
template <class T>
object& operator=(T const&);
object& operator=(object const&);
ところで、これに似た問題を見つけましたが、誰も答えませんでした。
luabind ヘッダーを確認しましたが、これらの恐ろしいプロキシ内に手がかりが見つかりませんでした。
最初のコードが正しくない理由と、オーバーロードされているかどうかを誰か教えてもらえますかoperator=(T const &)
?
どうもありがとう!!