Я использую Luabind для привязки API C ++ к Lua. У меня есть некоторые объекты, которые не могут быть созданы напрямую, а должны быть созданы в другом потоке. В настоящее время я обрабатываю это, определяя «статический» член с именем create
, который возвращает до создания объекта:
luabind::class_<Foo>("Foo")
.scope
[
luabind::def("create", &someCreateMethod, luabind::yield)
]
Это работает, но имеет недостаток, заключающийся в усложнении клиентского API. Для этих классов вы не можете создать их нормально (например, local f = Foo()
), но вместо этого нужно сделать local f = Foo.create()
.
Можно ли определить конструктор Luabind, который на самом деле не вызывает конструктор C ++, а вместо этого другую функцию, которая возвращает сконструированный объект (и может дать результат тем временем)? Я пытался определить привязки для __init
и __call
(последний под scope
, чтобы определить его для класса, а не для его экземпляров), но у меня не было успеха ни с одним из подходов.