返回

hi,云风你好,一直有看你的博客,收益匪浅。今天和朋友讨论一个问题,没有结果,所以也希望能获得你的一点意见。

问题是这样的我们项目使用scaleform开发ui,sf提供了一个方式可以让as通过直接调用c++的函数。比如c++里写好函数func(),并通过sf的一个FuncObject包装,可以和as的一个object对应起来as中调用:object(parameters),这会调用到FuncObject::Call(params)

这里我们遇到一个分歧:

我的想法: 一个函数注册机制,比如把所有函数用字符串注册到一个map里面,初始化系统时,创建一个FuncObject对应到as的一个global.func_obj对象。 比如有函数func1, func2, 则as这样调用,global.func_obj("fun1", param1, param2, ...)global.func_obj("fun2", param1, param2, ...)在c++的FuncObject::Call里面,通过map找到函数来执行

我朋友的想法: 把所有函数用字符串注册到一个列表里面,初始化系统的时候,为每个函数创建一个FuncObject,设置到as的一个global.func_obj变量里面比如有c++函数,func1, func2这样,在as这边可以这样调用,global.func_obj.func1(), global.func_obj.fucn2()

到这步,我也都同意,觉得也挺好的但是后面他还提出每个函数在global这个类里面做一个as这边的封装,也就是每需要加一个函数就要在as的global类里面定义fun1, fun2,函数内部再去调用func_obj.fucn1(), func_obj.fucn2()

这样的理由有这么几点:1 通过封装,可以限制参数类型(as的函数参数可以指定类型),获得编译时错误2 通过编辑器(比如FlashDevelop)可以有代码提示,方便对函数的查找,函数多的时候,别人要使用这些函数,可以快速的找到

我不认同的有两点1 这么做导致导出一个函数到as要付出的成本很大,c++声明、定义、注册函数,as定义函数,编译as到global.swf,然后才能进行使用(我的方法,c++做完后,as这边就可以直接用了)

2 理念上,我认为动态语言让我们脱离了对类型的限制,函数也可以作为第一类值来灵活的应用,很大的提高了开发的敏捷性。在我用c++几年后我就老想办法怎样用字符串来创建对象,调用函数。虽然这样带来一些隐患,但可以从其他一些制度上去规范。比如规划文件、规范命名、规范文档、注释等等。

希望能获得你的建议,谢谢

名字: 自动排版 密码:

回复 | (2623) | pyzhangxiang | 2013-01-11 05:49:02