2013-08-09 4 views
1

Я изучаю 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 &)?

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

ответ

0

Luabind 0.9.1 не имеет такого оператора = перегрузка в объекте, независимо от того, что говорит (возможно, устаревшая!) Документация. Фактически, объект вообще не имеет операторов = перегрузок (и не имеет объекта 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) 

, который может быть создан для междунар.

Смежные вопросы