lua 的包装库好多 巨形的就算是luabind 因为要加boost  boost里的mpl 模板元编程 还真TMD封装吓死人
这里转载了一下这个高手的 http://www.nuclex.org/articles/quick-introduction-to-luabind
这里是他的源码 看看吧 copyleft not me 版拳 非我 
// --------------------------------------------------------------------------------------------- //
// LuaBind example
//
// This example project for Microsoft(tm) Visual C++ 2008(tm) users
// compiles out-of-the-box. Precompiled binaries can be found in the
// "References" directory in case you wish to use them for other
// projects. Pay attention to the runtime library (multithreaded dll)
// setting and the different library files being used for debug and release
// builds when you do so!
// 注意要多线程
// --------------------------------------------------------------------------------------------- //
// Include the lua headers (the extern "C" is a requirement because we're
// using C++ and lua has been compiled as C code)
extern "C" {
  #include "lua.h"
  #include "lualib.h"
  #include "lauxlib.h"
}
// This is the only header we need to include for LuaBind to work
#include "luabind/luabind.hpp"
// Some other C++ headers we're most likely going to use
#include <iostream>
#include <string>
// We don't want to write std:: every time we're displaying some debug output
using namespace std;
// --------------------------------------------------------------------------------------------- //
// Put your testing code here...
// 这个里面一共有X个示例调用luabind注册C++的Function && class to lua
// 一个C++函数
void print_hello(int number) {
	cout << "hello world " << number << endl;
}
// 一个C++类
class NumberPrinter {
public:
	NumberPrinter(int number) :
	  m_number(number) {}
	  void print() {
		  cout << m_number << endl;
	  }
private:
	int m_number;
};
// 一个模板类
template<typename T>
struct Point {
	Point(T X, T Y) :
	X(X), Y(Y) {}
	T X, Y;
};
//一个模板的模板类
template<typename T>
struct Box {
	Box(Point<T> UpperLeft, Point<T> LowerRight) :
	UpperLeft(UpperLeft), LowerRight(LowerRight) {}
	Point<T> UpperLeft, LowerRight;
};
// 资源管理类
struct ResourceManager {
	ResourceManager() :
		m_ResourceCount(0) {}
	void loadResource(const string &sFilename) {
		++m_ResourceCount;
	}
size_t getResourceCount() const {
	return m_ResourceCount;
}
size_t m_ResourceCount;
};
  //注册c++的东西到lua里去都是用lua::module lua::def 的
  //关键看的就是这个 module def的写法
  //注册函数:luabind::module(L) [ luabind::def("print_hello", print_hello)]; 
  //	估计是注册了一个lua函数
  //注册类  :luabind::module(L) [luabind::class_<NumberPrinter>("NumberPrinter") .def(luabind::constructor<int>()).def("print", &NumberPrinter::print)];
  //	估计是
int main() {
  //初创建一个lua_state
  lua_State *myLuaState = lua_open();
  // Connect LuaBind to this lua state
  luabind::open(myLuaState);
//2//注册C++函数到lua
  //void print_hello(int number) {cout << "hello world " << number << endl;} 要放全局 
  luabind::module(myLuaState) [
	  luabind::def("print_hello", print_hello),
		  luabind::class_<NumberPrinter>("NumberPrinter")
		  .def(luabind::constructor<int>())
		  .def("print", &NumberPrinter::print),
		  luabind::class_<Point<float> >("Point")
		  .def(luabind::constructor<float, float>())
		  .def_readwrite("X", &Point<float>::X)
		  .def_readwrite("Y", &Point<float>::Y),
		  luabind::class_<Box<float> >("Box")
		  .def(luabind::constructor<Point<float>, Point<float> >())
		  .def_readwrite("UpperLeft", &Box<float>::UpperLeft)
		  .def_readwrite("LowerRight", &Box<float>::LowerRight)
  ];
  luaL_dostring(
	  myLuaState,
	  "function add(first, second)\n"
	  "  return first + second\n"
	  "end\n"
	  "print_hello(123)\n"
	  "Print2000 = NumberPrinter(2000)\n"
	  "Print2000:print()\n"	
	  "MyBox = Box(Point(10, 20), Point(30, 40))\n"
	  "MyBox.UpperLeft.X = MyBox.LowerRight.Y\n"
	  );
  cout << "Result: "<< luabind::call_function<int>(myLuaState, "add", 2, 3) << endl;  
  lua_close(myLuaState);
  getchar();
  return 0;
}