Как перегружается оператор присваивания luabind :: object?

Я изучаю luabind и пытаюсь использовать luabind :: object для доступа к переменным в Lua из C ++.

Когда я назначил 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&);

Кстати, я нашел мою проблему похожей на этот, но никто не ответил на это.

Я посмотрел на заголовки luabind, но не смог найти никакой подсказки в этих ужасных прокси.

Может ли кто-нибудь сказать мне, почему первый код не является правильным и является ли operator=(T const &) перегружен?

Большое спасибо!!

1

Решение

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.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]