yang131

导航

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

//这里这个类传入对象类型,以及属性或者方法的字符串,然后对象就能运行就像
//代码调用一样,不要小看这个框架,他可是我三维游戏引擎强大的根基,反射~

  

 

posted on 2026-01-15 18:44  NoNight  阅读(2)  评论(0)    收藏  举报