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);


讓地獄深紅的天亮 發表在 痞客邦 PIXNET 留言(0) 人氣()