Я изучаю luabind и пытаюсь использовать luabind :: object для доступа к переменным в Lua из C++.Как перегружен оператор luabind :: object?
Когда я назначил 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&’
Но после того, как я объединил две строки, код работал:
g["a"] = 6;
Я не знаю, почему это произошло. В документации luabind говорится, что:
Когда у вас есть объект Lua, вы можете присвоить ему новое значение с помощью оператора присваивания (=). Когда вы это сделаете, default_policy будет использоваться для преобразования из значения C++ в Lua.
И в объявлении класса, оператор присваивания перегружен для любых типов, а не только для объекта &:
template <class T>
object& operator=(T const&);
object& operator=(object const&);
Кстати, я нашел мою проблему, подобную this, но никто не ответил ,
Я взглянул на заголовки luabind, но не мог найти подсказки внутри этих ужасных прокси.
Может ли кто-нибудь сказать мне, почему первый код неверен и перегружен ли operator=(T const &)
?
Большое спасибо!