Luabind를 사용하여 Lua에 C++ API를 바인딩하고 있습니다. 직접 생성 할 수없는 개체가 있지만 다른 스레드에서 만들어야합니다.Luabind의 사용자 정의 생성자
luabind::class_<Foo>("Foo")
.scope
[
luabind::def("create", &someCreateMethod, luabind::yield)
]
이 작동하지만 클라이언트 API를 복잡 단점이있다 : 저는 현재 객체가 생성 될 때까지 산출 create
라는 "정적"멤버를 정의하여이 문제를 처리하고 있습니다. 이 클래스의 경우 정상적으로 만들 수는 없지만 (예 : local f = Foo()
) local f = Foo.create()
해야합니다.
실제로 C++ 생성자를 호출하지 않는 Luabind 생성자를 정의 할 수 있습니까? 대신 생성 된 객체를 반환하는 다른 함수를 정의 할 수 있습니까? 나는 __init
과 __call
에 대한 바인딩을 정의하려고 시도했다. (후자 인 scope
은 인스턴스가 아니라 클래스에 정의했다.)하지만 어느 방법으로도 성공하지 못했다.
그리고 C++이나 루아 측에서도'__call' 연산자로 "가짜"할 수는 없습니까? – Xtapolapocetl
@Xtapolapocetl : Luabind는 C++ 유형을 userdata로 저장하므로 루아 코드는 메타 테이블에 영향을 줄 수 없습니다. C++에서 Luabind의 메타 테이블을 찌를 수는 있지만 실제로 이것은 무시할 수없는 사소한 문제입니다. 사실, 구문이 * 정말로 * 귀찮다면 Luabind로 객체'FooInternal'을 호출하고'FooInternal.create' 함수를 호출하는'Foo' 함수를 만들면됩니다. 사용자는 'Foo'라는 클래스를 사용하고 있다고 생각할 수 있습니다. –
@Xtapolapocetl : 니콜 (Nicol)의 의견 외에도'Foo '만 사용하여 객체를 만드는 경우 (즉, 다른 범위 방법이없는 경우)'Foo = Foo.create '를 수행 할 수도 있습니다. – sbk