我正在学习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&’
但在我将这两行合并后,代码才有效:
g["a"] = 6;
我不知道为什么会这样。在luabind文档中,它说:
如果有Lua对象,可以使用赋值运算符(=)为其赋值。 执行此操作时,将使用default_policy进行从C ++值到Lua的转换。
在类声明中,赋值运算符为任意类型重载,而不仅仅是对象&amp;:
template <class T>
object& operator=(T const&);
object& operator=(object const&);
顺便说一句,我发现我的问题类似于this,但没有人回答。
我已经查看了luabind标题,但在这些可怕的代理中找不到任何线索。
有人能告诉我为什么第一个代码不正确以及operator=(T const &)
是否超载?
非常感谢!!
答案 0 :(得分:0)
Luabind 0.9.1在对象中没有这样的operator =重载,无论(可能是过时的?!)文档说什么。事实上,对象根本没有operator =重载(并且没有object_interface,哪个对象派生自。)
然而,它有:
template<class T>
index_proxy<object> operator[](T const& key) const
这是g["a"] = 6;
工作的原因,因为index_proxy有:
template<class T>
this_type& operator=(T const& value)
可以为int实例化。