This folder includes a project that demonstrates some of the more sophisticated and complex features of LuaWrapper. Make sure you fully understand the code in example 1 before reading the code here. Example 2 introduces some of the features contained in the luawrapperutil.hpp file which are prefixed with luaU_ instead of luaW_ # Automatic Getter and Setter Generation In example 1, all of the wrapper functions were written manually. It is very common need to write get or set function wrappers - so common in fact that this patter was extracted out into a templated function. In example 1, BankAccount had the following wrapper: int BankAccount_checkBalance(lua_State *L) { BankAccount* account = luaW_check<BankAccount>(L, 1); lua_pushnumber(L, account->checkBalance()); return 1; } static luaL_Reg BankAccount_metatable[] = { ... { "checkBalance", BankAccount_checkBalance }, ... }; Rather than write code like that every time you need to create a get function, you can instead just do this: { "checkBalance", luaU_get<BankAccount, float, &BankAccount::checkBalance }, This code will automatically instantiate a function wrapper that returns a float, the result of a call to checkBalance. # Generic push, to and check functions Normally, when you need to push a value to Lua or get a value from the stack, you use a function like lua_pushnumber or lua_tonumber. luawrapperutil.hpp contains a generic version of these functions as well as specializations for the primitive types in C++. That means you can do things like this: int i = luaU_check<int>(L, 1); luaU_push<double>(L, 1.234); Additionally, it is possible to extend this functionality to non-primitive types. A common use is to create a wrapper for std::strings so that you may do this: std::string str1 = luaU_check<std::string>(L, 1); std::string str2 = "Lua is awesome!" luaU_push<std::string>(L, str2); Examples of how to create your own luaU_push, luaU_to, and luaU_check can be found in LuaCustomTypes.hpp A visual studio project and makefile are provided, or you can use your own tool chain to compile the example. Once compiled, run example2.exe example2.lua or ./example2 example2.lua to see the code in action.