Могут ли Luabind получить и получить собственность? - PullRequest
0 голосов
/ 14 ноября 2011

Можно ли создать свойство Luabind с геттерами и сеттерами, которые выдают, ожидая выполнения запроса в другом потоке?Следующий синтаксис компилируется, но, похоже, не работает:

luabind::class_<Foo>("Foo")
  .property("bar", &Foo::getBar, &Foo::setBar, luabind::yield)

Обтекание объекта на стороне Lua и добавление оберток свойств вокруг обычных функций не является хорошим вариантом, так как мне нужно определить эти свойства на основеклассы, и это потребовало бы большого дублирования кода оболочки для каждого производного класса.

1 Ответ

0 голосов
/ 14 ноября 2011

Следующий синтаксис компилируется, но, похоже, не работает:

Конечно, это не работает;luabind::yield решает другую проблему.yield указывает системе выдавать после , когда функция завершается, не раньше и, конечно, не в середине.

Невозможно выполнить в середине функций C / C ++,В Lua 5.2 добавлена ​​возможность устанавливать функцию «возобновления», но даже в этом случае существует значительная опасность уступки в коде C ++, поскольку Lua обычно не очищает стек.

Что вы хотите сделать, так этовыдает до вызова функции.Это было бы эквивалентно следующему коду Lua:

function myGet(...)
  local tester = StartAsyncAction(...);
  while(~tester:IsFinished()) do
    coroutine.yield();
  end
  return tester:Get(...);
end

Вы не можете подражать этому в C / C ++;не с Lua 5.2.А Luabind не полностью поддерживает новые функции 5.2.

...