angelscript 无敌666的反射用法
通过对angelscript的使用,其中想知道他是否有大用处,就在于反射的使用
先说as我使用的时候遇到的问题,不能返回数组
注册值类型的类不支持handle
as中多态的使用(已解决)
?的传入不支持
对封装SetProperty的使用的理解:
封装时竟然支持 ?&in的传入,不同于之前
然后测试,具体是这样的
class AA{ int a; //这个是angelscript的基本类型 string b; //这个是object类型 string c; }
起初 : c++注册 类型到angelscript,然后返回了typeid,然后发现与generic传入的一样
然后发现typeInfo实际上由两部分可以获取,engine,和module,engine记录了所有c++注册的对象类型,而module记录的是脚本中的类型
他们两个一个是asTYPEID_APPOBJECT(native c++注册的),asTYPEID_SCRIPTOBJECT(脚本声明的)
两个都支持ScriptObject,
所以如何赋值呢,
起初我想的是 因为获取的ArgAddress,根据typeID就能找到对应的c++类, 比如typeid是 234,而它对应的是string,那么 就这样*obj = *<string*>targetVal;
后来根据gemini的提示才发现,找到他的函数opAssign(操作符=的名称),然后对对象赋值即可,这里我不知道脚本的类型(只知道typeID,typeinfo,以及类名称,但是类名称对应的是字符串,代码里无法转化,所以找到操作符=是非常理智的抉择),
至此非常理想的反射框架成功。
分享下框架功能:
class ASClass{
void GetProperty(? &in obj,string name,? &inval)
void SetProperty(? &in obj,string name,? &inval)
void CallMethod(? &in obj,string name,? &inval);
};
//这里这个类传入对象类型,以及属性或者方法的字符串,然后对象就能运行就像
//代码调用一样,不要小看这个框架,他可是我三维游戏引擎强大的根基,反射~
浙公网安备 33010602011771号