2013-10-08 3 views
1

Я использую lua 5.2.2 с luabind 0.9.lua/luabind - добавить и перезаписать методы класса через lua

Я хотел бы иметь возможность добавлять дополнительные классы-методы через lua для любых классов, которые я привязал в C++, но я не уверен, как это сделать.

Проблема заключается в том, что luabind использует функцию как __index-metamethod для любых связанных классов вместо таблицы, поэтому я не вижу способа доступа к методам классов вообще.

например, я связывании мои классы, как это:

luabind::module(lua) 
[ 
    luabind::class_<testClass>("TestClass") 
    .def(luabind::constructor<>()) 
    .def("TestFunc",&TestFunc) 
]; 

То, что я в основном хочу сделать, это добавить Lua-функцию к списку методов для этого класса, и быть в состоянии переписать существующий :

Любая помощь будет принята с благодарностью.

ответ

0

Вы можете использовать свойство Luabind :: объект и зарегистрировать его с помощью метода .Property Свойство из Luabind

Что-то вроде этого:

//Class 
class FunctionCaller 
{ 
public: 
    luabind::object Fn; 

    void SetFn(luabind::object NewFn) 
    { 
     Fn = NewFn; 
    }; 

    luabind::object GetFn() 
    { 
     return Fn; 
    }; 
}; 

//Binding Code 
luabind::class_<FunctionCaller>("FunctionCaller") 
    .def(luabind::constructor<>()) 
    .property("Fn", &FunctionCaller::Fn, &FunctionCaller::SetFn, &FunctionCaller::GetFn) 

Тогда вам просто нужно вызвать Luabind :: объект по к документам luabind.

Это не совсем то, что вы хотите сделать, но это может помочь вам переписать функцию, я думаю. Вы можете связать реальную функцию и иметь свойство, проверить, не является ли объект luabind :: не нулем, и вызвать его или собственную функцию.

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