luabind :: object的赋值运算符是如何重载的?

时间:2013-08-09 14:35:43

标签: c++ lua operator-overloading luabind

我正在学习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 &)是否超载?

非常感谢!!

1 个答案:

答案 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实例化。