2013-05-26 2 views
2

동적 속성을 사용하여 클래스를 만들고 싶습니다. 예를 들어 :luabind 및 동적 속성

local myclass a; 
a.SetValue("var1", 5); 
a.SetValue("var2", 10); 
print(a.GetValue("var1"), a.GetValue("var2")); 

VAR1, VAR2 :

local myclass a; 
a.var1 = 5; 
a.var2 = 10; 
print(a.var1, a.var2); 

이 마음에 들지 :

class MyClass 
{ 
public: 
    int GetValue(string str) 
    { 
     return smap[str]; 
    } 
    void SetValue(string str, int i) 
    { 
     smap[str] = i; 
    } 

private: 

    std::map<string, int> smap; 
}; 

어떻게 luabind와 루아 나 같은 루아에서 사용할 mluabind이 클래스를 바인딩 할 수 있습니다 - 내가 런타임에만 알고있는 변수 이름.

답변

0

이 작업은 Lua 메타 테이블을 사용하여 수행 할 수 있습니다.

루아의 각 테이블에 대해 테이블의 연산자를 오버로드하는 데 사용할 수있는 테이블 인 메타 테이블과 멤버에 액세스하는 방법을 제공 할 수 있습니다. 즉, 누군가가 테이블 내부의 멤버에 액세스하려고 할 때 발생할 일을 설명하는 메소드를 제공하는 데 사용할 수 있습니다. Metatables chapter in PIL과 특히 '테이블 액세스 메타 메소드'섹션을 참조하십시오.

귀하의 경우에는 C++ 클래스에 대한 읽기 및 쓰기 액세스를 제공하는 두 가지 C++ 함수를 만들 수 있습니다. 그런 다음 Lua에 바인딩하고 Lua 테이블을 오버로드하여 테이블에있는 값을 읽거나 값을 쓸 때마다 이러한 함수를 호출 할 수 있습니다.