http://damody.googlecode.com/files/teachingLua.zip
這是個人目前做的小小專案中的小小類別,用來得到與設定lua的資料
大部份應該都ok,就小部份講解一下:
BackType(INTEGER) 是enum的標準用法。
va_list v1;可變參數指標
const_cast<char*>是為了消掉const屬性
大概就這樣吧!
有用到偏特化的小技巧,只支援int, float, const char*三個lua的基本型態。
部份源碼.h檔class LuaCell
{
public:
enum BackType {INTEGER,LONGFLOAT,STRING};
LuaCell();
~LuaCell();
bool callLua_Function(const char* functionName);
bool callLua_Function(const char* functionName, const char* signString, ...);
bool InputLuaFile(const char* path);
int getLua_Int(const char* signString, ...);
double getLua_Double(const char* signString, ...);
const char* getLua_String(const char* signString, ...);
int getLua_Int_UsePath(const char* pathString);
double getLua_Double_UsePath(const char* pathString);
const char* getLua_String_UsePath(const char* pathString);
void* getLua_Value_UsePath(const char* pathString, int type );
void* getLua_Value(const char* pathString, int type, va_list vlist);
template <class T> T getLua_UsePath(const char* pathString);
void setLua_Int_UsePath(const char* pathString, int data);
void setLua_Double_UsePath(const char* pathString, float data);
void setLua_String_UsePath(const char* pathString, const char* data);
void setLua_Value_UsePath(const char* pathString, int type, void* data);
template <class T> void setLua_UsePath(const char* pathString, T data);
void setLua_Int(const char* pathString, int value, ...);
void setLua_Double(const char* signString, float value, ...);
void setLua_String(const char* signString, const char* value, ...);
void setLua_Value( const char* signString, int type, void* data, va_list vlist );
bool setLua_NewTable(const char* table);
bool checkLua_ValueIsNil(const char* variable);
private:
template <class T> T getLua() {return NULL;}
template <> int getLua<int>();
template <> double getLua<double>();
template <> const char* getLua<const char*>();
template <class T> void setLua(T data) {}
template <> void setLua<int>(int data);
template <> void setLua<double>(double data);
template <> void setLua<const char*>(const char* data);
bool isDigitString(const char *str);
lua_State* m_LuaState;
static char buffer[10];
};
//要預先宣告偏特化才不會連結錯誤
template int LuaCell::getLua_UsePath<int>(const char* pathString);
template double LuaCell::getLua_UsePath<double>(const char* pathString);
template const char* LuaCell::getLua_UsePath<const char*>(const char* pathString);
template void LuaCell::setLua_UsePath(const char* pathString, int data);
template void LuaCell::setLua_UsePath(const char* pathString, double data);
template void LuaCell::setLua_UsePath(const char* pathString, const char* data);
公告版位
星落的瞬間!放棄的後悔是永遠!
- Dec 04 Fri 2009 18:16
C++與Lua溝通的介面實作
全站熱搜
留言列表