Здравствуйте, johny5, Вы писали:
тоже не совсем понял, что хочется, но попробую что-нибудь внятное ответить...
J>Попробую разложить:
J> Хочу вместо вызова luaL_dostring, что сразу запускает скрипт на выполнение, сделать сначала luaL_loadstring, куда-то закешировать скомпилированный скрипт (типа очевидная оптимизация), потом использовать этот скрипт как конструктор для моих Lua-объектов (Lua-объект это зеркало С++ объекта, для которого дополнительно будет крутиться и скрипт). К примеру в скрипте содержится:
в общем случае это будет не совсем верно, поскольку у тебя могут накапливаться состояния части объекта в lua, и по идее жизнью таких объектов должнен управлять lua. По-моему правильнее сделать так:
есть базовый C++ класс, условно Widget, с виртуальными функциями(popup_effect), пишешь для него wrapper, как указано в документации к luabind(12.1 Deriving in lua)
создаешь класс, допустим SuperWidgetWithPopupFX в lua, наследуешься от Widget, переопределяешь виртуальную функцию popup_effect в lua со своей доп. логикой, порождаешь объект lua класса на lua стороне, отдаешь его хоть в C++, вызов виртуальной функции со стороны C++ будут автоматически транслироваться на сторону lua.
J>J>function create_popup_effect(initial_sleep_delay)
J> return coroutine.wrap(
J> function(dt)
J> ...
J>function on_idle(dt)
J> absolute_time = absolute_time + dt
J> return angle_anim(dt)
J>end
J>angle_anim = create_popup_effect(0.5)
J>
J>т.е. скрипт создаёт короутины, которые будут крутиться для моего объекта. Важно тут что объектов может быть много и они не должны никак влиять друг на друга. Отсюда вопросы, как закешировать скрипт (в результате luaL_loadstring что получается, функция?); как запускать его так, чтобы он не гадил в глобальный неймспейс а писал только в объект. Желательно в терминах luabind.
J>-----
J>Второй вопрос (часть первого), как делают ООП в Lua? Я видел примеры с использованием luabind::call_method, но не понял как он используется, можно пояснить по этому? Взять простейший пример. Есть С++ объект, он отображается (через luabind (class_<>, .def()) описания) напрямую в Lua. Соответственно Lua часть объекта может иметь и свои переменные. Код, работающий в С++ и в Lua работают с одним объектом, и как и в ООП, этот код не влияет на другие объекты того же класса.
совсем сумбурно вопрос написал

вроде-бы на первую часть ответил, по второй части все будет и так хорошо, для этого передаются this и self

только опасяйся слайсинга(lubind doc — 12.4 Slicing), там всё хорошо написано.
J>Спасибо.