2014-06-15 4 views
0

루아 바인드를 사용하여 루아의 "클래스"를 인스턴스화 할 수 있습니까?Luabind를 사용하여 루아 클래스를 구체화

class "Person" 

function Person:__init(name) 
    self.name = name 
end 

function Person:display() 
    print(self.name) 
end 

내가 같은 루아 스크립트에서이 클래스를 인스턴스화 할 수 있습니다 모든 것이 잘 작동 : 문제를 설명하기 위해 다음과 같은 간단한 루아 스크립트를 고려하십시오. 그러나, 내 C++ 응용 프로그램 내에서 Luabind를 사용하여이 클래스의 새 객체를 인스턴스화하려고합니다. 나는 다음을 시도했다 :

luabind::object myObject = luabind::globals(L)["Person"]("John Doe"); 
myObject["display"](); 

나는 콘솔에 "John Doe"출력을 기대한다. 대신, 나는 Lua 런타임 오류로 인사 장을 보낸다. 새 객체를 만드는 호출이 작동합니다. 디스플레이 기능에서 self이라는 메시지가 나타나지 않는 문제가있는 것 같습니다. 루아에서 연산자 다음 루아가 자동으로 첫 번째 인수로 호출을 제공 할 것입니다 - ""당신이 사용하는 경우 때문에

+0

당신이 필요로하는 그 목적을 위해 사용할 수 luabind의 간단한 기능을 사용하여 luabind가 정상적인 함수가 아닌 메서드를 호출하거나 해당 호출의 표시 메서드에 개체를 수동으로 전달하는 방법을 알아보십시오. –

답변

1

자기전무입니다. 그렇게 :

luabind::object myObject = luabind::globals(L)["Person"]("John Doe"); 
myObject["display"](myObject); 

심지어 더 나은 :

somePerson:display() == somePerson.display(somePerson) 

그러므로 당신도 그 자체 인수를 제공해야

luabind::object myObject = luabind::globals(L)["Person"]("John Doe"); 
luabind::call_member<void>(myObject, "display");