2011/07/12のツイッターでつぶやいた、
にあった、ソースをちょっと説明してくれよ!とあったので、簡単に説明しよう。上の画像をみれば、分かる人には一瞬にして分かる(-.☆
まず、sqplus.hファイルのSQClassDefBaseの構造体の中に追加せよ。
はぃ、これで使えるようになりました。簡単でしょ?
これで何ができるようになったんだい?と思った人もいるだろう。
SqClassDef<hoge>(_T("hoge").constant(0,_T("TEST"));
をスクリプト側で呼び出した場合、
print("hoge.TEST="+hoge.TEST);
エラーで怒られてしまいます。
obj = hoge();
print("obj.TEST="+obj.TEST);
これだとOKなんですよね。hogeで呼びたい時ってありますよね^^
それで、上記のソースを追加することによって、
SqClassDef<hoge>(_T("hoge").staticConstant(0,_T("TEST"));
と書いて、 hoge.TESTが使えるようになるんですね。
それだけなんだけどね^^;
にあった、ソースをちょっと説明してくれよ!とあったので、簡単に説明しよう。上の画像をみれば、分かる人には一瞬にして分かる(-.☆
まず、sqplus.hファイルのSQClassDefBaseの構造体の中に追加せよ。
// KAOKEN added [start]. http://www.kaoken.cg0.xyz // Register a static constant (read-only in script, passed by value (only INT, FLOAT, STRING, or BOOL types)). template <typename ConstantType> SQClassDefBase & staticConstant(const ConstantType constant,const SQChar * name) { HSQUIRRELVM v = SquirrelVM::GetVMPtr(); sq_pushobject(v,newClass.GetObjectHandle()); sq_pushstring(v,name,-1); switch(TypeInfo<ConstantType>().TypeID) { case VAR_TYPE_INT: sq_pushinteger(v,constant);break; case VAR_TYPE_UINT: sq_pushinteger(v,(const int)constant);break; case VAR_TYPE_FLOAT: sq_pushfloat(v,constant);break; case VAR_TYPE_BOOL: sq_pushbool(v,constant);break; default: throw SquirrelError(_SC("staticConstant(): type must be INT, FLOAT, BOOL, or CONST CHAR *.")); } sq_createslot(v,-3); sq_pop(v,1); return *this; } SQClassDefBase & staticConstant(const SQChar* constant,const SQChar * name) { HSQUIRRELVM v = SquirrelVM::GetVMPtr(); sq_pushobject(v,newClass.GetObjectHandle()); sq_pushstring(v,name,-1); sq_pushstring(v,constant,-1); sq_createslot(v,-3); sq_pop(v,1); return *this; } // KAOKEN added [end].
はぃ、これで使えるようになりました。簡単でしょ?
これで何ができるようになったんだい?と思った人もいるだろう。
SqClassDef<hoge>(_T("hoge").constant(0,_T("TEST"));
をスクリプト側で呼び出した場合、
print("hoge.TEST="+hoge.TEST);
エラーで怒られてしまいます。
obj = hoge();
print("obj.TEST="+obj.TEST);
これだとOKなんですよね。hogeで呼びたい時ってありますよね^^
それで、上記のソースを追加することによって、
SqClassDef<hoge>(_T("hoge").staticConstant(0,_T("TEST"));
と書いて、 hoge.TESTが使えるようになるんですね。
それだけなんだけどね^^;