U E D R S I H C RSS
ID
Password
Join
다른 사람을 설득하는 가장 좋은 도구는 우리의 귀. 즉 상대편 말에 우선 귀를 기울여 듣는 것. ―딘 러스크(前 美국무장관)

소스코드 #

//
// luabind class와 C++ class와의 맴버 함수/변수의 상호 참조/호출 테스트
// 
// example by redpixel
//
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;

struct parent_class {
	int v_;
	int get_v() const { return v_; }
	void set_v(int v) { v_ = v; }
	void func1() { cout << "C++ - parent_class::func1()" << endl; }
	void func0() { cout << "C++ - parent_class::func0()" << endl; }
	parent_class() { v_ = 10; }
};

char test_src[] = 
	"class 'child_class'(parent_class);"
	"function child_class:__init() super() end;"
	"function child_class:func1() 	print('lua - child_class::func1()') end;"
	"function child_class:func2(v_) print('lua - child_class::func2() - '..v_) end;"
	"ttt = child_class();"
	"print('- lua 호출 테스트 -----------------------------');"
	"print(ttt.v);"
	"ttt:func0();"
	"ttt:func1();"
	"ttt:func2('루아');"
	"print('- C++ 호출 테스트 -----------------------------');"
	"class_test(ttt);";

void class_test(luabind::object o_) {
	luabind::object fo0_ = o_["v"]; cout << luabind::object_cast<long>(fo0_) << endl;
	luabind::object fo1_ = o_["func0"]; fo1_(o_);
	luabind::object fo2_ = o_["func1"]; fo2_(o_);
	luabind::object fo3_ = o_["func2"]; fo3_(o_, "C++");
}

int main(int argc, char *argv[])
{
  lua_State *L = lua_open();
	luaopen_base(L);				// 기본 라이브러리
	luabind::open(L);				// luabind 초기화
  
  using namespace luabind;
    
  // 루아에 C++ 클래스 등록
  module(L)
  [
  	class_<parent_class>("parent_class")
  		.def(constructor<>())
  		.def("func0", 	&parent_class::func0)
  		.def("func1", 	&parent_class::func1)
  		.property("v", 	&parent_class::get_v, &parent_class::set_v)
		,
		def("class_test", &class_test)
  ];

	// 루아 테스트 스크립트 실행  
  lua_dostring(L, test_src);
  
  system("PAUSE");	
  return 0;
}

실행결과 #

- lua 호출 테스트 -----------------------------
10
C++ - parent_class::func0()
lua - child_class::func1()
lua - child_class::func2() - 루아
- C++ 호출 테스트 -----------------------------
10
C++ - parent_class::func0()
lua - child_class::func1()
lua - child_class::func2() - C++

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2010-10-28 12:42:52
Processing time 0.4010 sec