如何將函數與接受可變數量參數的luabind綁定?基本上,我想寫我自己的print()函數。luabind - 可變參數個數
我知道在luabind中的object
類作爲參數可以接受任何數據類型,最好的辦法是接收一個動態表luabind::object
作爲參數。
如何將函數與接受可變數量參數的luabind綁定?基本上,我想寫我自己的print()函數。luabind - 可變參數個數
我知道在luabind中的object
類作爲參數可以接受任何數據類型,最好的辦法是接收一個動態表luabind::object
作爲參數。
我已經做純粹的lua C API和luabind之間的混合:
int myPrint(lua_State* L)
{
int argCount = lua_gettop(L);
for(int i = 1; i <= argCount; i++)
{
luabind::object obj(luabind::from_stack(L, i));
switch(luabind::type(obj))
{
case LUA_TSTRING:
cout << luabind::object_cast<std::string>(obj);
break;
case LUA_TNUMBER:
cout << luabind::object_cast<double>(obj);
break;
case LUA_TBOOLEAN:
cout << boolalpha << luabind::object_cast<bool>(obj);
break;
case LUA_TNIL:
cout << "#Nil#";
break;
default:
cout << "#Unknown type '" << luabind::type(obj) << "'#";
break;
}
}
cout << endl;
return 0;
}
它看起來像luabind doesn't support that。但是,鑑於它是一個全局函數而不是某個類的方法,難道你不能只使用常規的C API嗎?它非常易於使用。例如,下面的返回類型的它的參數的可變參數的函數:
static int types (lua_State* L) {
int argc = lua_gettop(L);
for (int i=1; i <= argc; ++i) {
lua_pushstring(L, lua_typename(L, lua_type(L, i)));
}
return argc;
}
...
lua_register(L, "types", types);
您更好使用的String.Format並通過剩餘的字符串轉換成日誌功能。
function printf(...)
log(string.format(...))
end
這是我傾向於做的,然後我的應用程序可以決定將日誌輸出發送到文件或控制檯。
呀,它比luabind本身:) – vines 2011-05-26 10:43:36
由於更容易,但你爲什麼要返回的argc? – Congelli501 2011-05-26 13:34:31
這就是我們如何告訴API我們有多少返回值(這與我們使用'lua_pushstring'將多少物品推入堆棧相對應)。 – Mud 2011-05-27 01:26:40