2010-05-19 4 views
0

나는 이전에 질문 한 내용을 중점적으로 다룹니다.다른 클래스를 반환하는 클래스에 대한 SWIG-Lua 질문

저는 C++에서 두 개의 클래스를 가지고 있으며이를 감싸기 위해 SWIG를 사용합니다. 한 클래스의 메소드는 다른 클래스의 포인터를 리턴 할 수 있습니다. 루아가 그것을 단지 userdata 이상으로 보게하려면 어떻게해야합니까? 보다 구체적으로

:

나는

class fruit 
{ 
    int numberofseeds; 
    //some other stuff about fruit constructors etc... 
    public: 
    getseedcount() 
    { 
     return numberofseeds; 
    } 
} 

class tree 
{ 
    fruit * apple; 
    public: 
     //constructors and whatnot 
    fruit * getfruit() 
    { 
     return apple; 
    } 

} 

나는 내가 그래서

내가 X = 포모나 루아에서 개체를 얻을 수 루아

에 액세스 할 수 있습니다 꿀꺽 꿀꺽 이러한 두 개의 클래스를 래핑이 . 트리 (grannysmith). 지금

내 질문은 : getfruit() 나는 포모나을 얻을 것이다 : 나는 Y = X를 입력 할 때 그래서 어떻게 일을 준비 할 수 과일 유형의 객체? 내가 쓸 줄을 어디에서 y : getseedcount()? 현재 내가 먹을 수있는 userdata 만 있습니다.

답변

1

당신 꿀꺽 꿀꺽 .I 파일이 올바르게 설정되어있는 경우, 당신은 사용할 수 있습니다 ":"연산자 :

local y = x:getfruit() 
local z = y:getseedcount() 

SWIG Lua documentation의 "클래스"섹션 (23.2.7)를 참조하십시오.

그래도 작동하지 않는다면 .i 파일의 typemap을 사용하여 과일 * 출력 매개 변수를 루아 표현으로 변환하는 방법을 SWIG에 알려줘야합니다. 다음과 같음 :

%typemap(out) fruit* 
{ 
    swig_module_info* module = SWIG_GetModule(L); 
    swig_type_info* typeInfo = SWIG_TypeQueryModule(module, module, "fruit *"); 

    SWIG_NewPointerObj(L, $1, typeInfo, 1); 
} 
관련 문제