가끔 C++ 클래스상의 다수의 데이타들을 하나의 속성에 묶어 반환하고 싶을 때가 있습니다. 이때 개인적으로 다음과 같은 방법을 사용합니다.
- luabind::object를 반환값으로 하는 get 메소드를 하나 만들어 그 안에서 luabind::newtable() 함수를 사용하여 원하는 데이타를 담아 반환하도록 작성한다.
- 이 get 메소드를 readonly property로서 등록한다.
extern "C" {
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
};
#include <iostream>
#include <stdlib.h>
#include <luabind/luabind.hpp>
#include <luabind/class.hpp>
using namespace std;
lua_State *L = NULL;
struct test_class
{
luabind::object get_ttt() const {
using namespace luabind;
object o_ = newtable(L);
o_["t1"] = 10;
o_["t2"] = 20;
o_["t3"] = 30;
return o_;
}
};
...
module(L)
[
class_<test_class>("test_class")
.def("func1", &test_class::func1)
.property("ttt", &test_class::get_ttt)
,
def("init", &Linit),
def("test_func", &test_func)
];
루아코드는 다음과 같습니다.
Obj = test_class() print(Obj.ttt.t1) print(Obj.ttt['t2'])실행결과는 다음과 같을겁니다.
10 20위에서 보면 쉽게 알수 있듯이, 충분히 기존 C++ 클래스에서 사용가능한 방법입니다. 이 방법은 다음과 같은 장단점을 가지고 있습니다.
- 장점
- 이미 작성된 C++ 클래스에 쉽게 기능을 추가할 수 있다.
- 가변적이고 임의의 자료집합을 표현할 수 있다. (예 : 방금 전달된 네트워크 패킷의 데이타 내용)
- 단점
- 스크립트상에서는 티가 나지않지만 몰래 매번 참조할 때마다 새로 테이블을 생성한다. (이에 따른 성능상의 과부화 증가) 하지만 게임엔진상에서 매 루프마다 gc를 실행하는 구조에서는 그다지 부하가 없다









![[http]](/wiki/imgs/http.png)
