luaplusは公式ドキュメントとゆっくり話しています(六)



Calling Functions(lua関数を呼び出す)
 
LuaObjectはLua APIインタフェース関数の簡略化を試みる
スタックを完全に遮断する操作を行いました
一般的に、Luaを呼び出す関数は1行のコードで完了できます.
Recommended Style(推奨スタイル)
いくつかのc++テンプレートのテクニックを利用して、lua関数を呼び出すのは普通のc++関数を呼び出すようです.
LuaStateOwner state; state->DoString("function Add(x, y) return x + y end"); LuaFunction Add = state->GetGlobal("Add"); printf("Add: %d/n", Add(2, 7));  
テンプレートLuaFunctionには、戻り値タイプを意味するパラメータRT(return type)があります.
パラメータタイプは自動的に判断できますが、戻り値はできませんので、戻り値タイプのデフォルトの戻り値タイプを手動で設定する必要がありますvoid
LuaStateOwner state; state->DoString("function Print(str) print(str) end"); LuaFunction<> Print = state->GetGlobal("Print"); Print("Hello, world!");  
LuaPlusで使える内蔵戻り値タイプは
  • bool
  • char
  • unsigned char
  • short
  • unsigned short
  • int
  • unsigned int
  • long
  • unsigned long
  • float
  • double
  • const char*
  • const lua_WChar*
  • lua_CFunction
  • LuaStateCFunction
  • LuaStackObject
  • LuaObject
  • const void*
  • LuaArgNil()
  • LuaLightUserData(pointer)
  • LuaUserData(pointer)

  •  
    直接登録c++通常関数と同様にlua関数を呼び出すと、最大7パラメータしかサポートされません.
     
     
    Iostream-like Style(Iostream-likeスタイル)(iostreamこの部分はほとんどわかりません…)
    LuaPlus also employs a convention similar to the Standard C++ library's iostream functionality.  A simple example follows:
    LuaStateOwner state; state->DoString("function Add(x, y) return x + y end"); LuaObject funcObj = state->GetGlobal("Add"); { LuaAutoBlock autoBlock(state); LuaCall call = funcObj(); LuaStackObject retObj = call << 2 << 7 << LuaRun(); printf("Add: %d/n", retObj.GetInteger()); }  
     
    The function call starts by "calling"the LuaObjectLuaObject provides an overloaded function operator().  Then, each argument to the function is added to the argument list, left to right.  Finally, when all arguments are added, LuaRun() executes the function call.
    It can't be avoided that a Lua function call puts return values on the stack.  The LuaStackObject returned by the LuaPlus function call is the first return value.  There may be more. operator<< understands most Lua types.  The nil type is special, though.  In order to tell LuaPlus a nil should be inserted in the function's argument list, LuaArgNil() must be passed in.
    LuaObject funcObj = state->GetGlobal("PrintIt");
    LuaCall call = funcObj;
    LuaStackObject retObj = call << "String" << LuaArgNil() << LuaRun();
    LuaRun() takes an optional argument detailing the number of return values allowed.  By default, multiple return values are allowed.
    LuaObject funcObj = state->GetGlobal("ThreeReturnValues");
    LuaCall call = funcObj;
    LuaStackObject retObj = call << LuaRun(1);  // Only accept one return value.

     
     
     
    Metables(メタテーブル)GetMetaTable()  Metatable  LuaObjectMettableは基本タイプとして共有されていますが、詳細は次のメタテーブル拡張セクション(Mettable Enhancements)セクションを参照してください.
     
    わからない
    A metatable can be changed for a LuaObject via the SetMetaTable() function.  If the LuaObject represents a table or userdata, the metatable change is as per standard Lua.  If the LuaObject is a basic type, the metatable is changed for all basic types.