首页 > 代码库 > JavaScrip代码转C++代码的一些方法
JavaScrip代码转C++代码的一些方法
一: 关于公有成员,私有成员,公有方法,私有方法
1): 公有成员:
就目前了解来看,在JS中形如this.XXX, 或者在defineProperties() 域中定义的成员变量,都是公有的。
2): 私有成员:
就目前了解来看,在JS中形如 this._XXX 都是私有的, 当然往往有私有成员在defineProperties()域中被转成了公有成员:
例:
3): 私有方法:
就目前了解来看, 在JS中形如 function XXX() 都是私有的, 只在本类使用。
4): 公有方法 而形如 this.XXX 或者 类.prototype.XXX() 就是公有方法。
二: 关于get, set 方法的使用
对某一成员变量来说,如果JS中有set方法, 那么需要加get,get方法。 而如果没有set并且这个成员变量可以做成公有的, 就不必加get,set了。
三: 关于构造函数中的Options
1):Options 简单的,Options域中的成员完全可以作为构造函数参数;
例:
C++中可以这样处理:
2): Options 复杂的,把Options单独声明成类或者结构体,再把这个结构当做构造函数参数。
例:
C++中可以做成这样:RenderStateOption 定义为一个类结构
3):构造函数中的默认参数值, 成员函数中的默认参数值,在JS中常常看到这样的情况defaultValue(XXX, XXX), 或者在JS的注释中标明了defaultvalue, 这两种情况都要在构造函数中,或者成员函数中,增加默认值。
四: 关于JS中代表多种类型TypeArray,Value:
在JS中是弱类型的, 一个Value可以表述为int, float, double等。一个TypeArray也可能代表不同类型, 这种情况分两种情况处理。
1):用模板处理,例:buffer.js 中arrayView 可以是不同类型
在C++中用模板处理:
2): 用面向对象的继承处理,基类指针指向子类实例: 例:ShaderProgram.js 中Uniform
在C++中这样处理的:
五: 关于JS中函数指针
JS中经常会定义函数指针,或者会类附加一个函数,这个分两种情况对待:
1):函数指针仅在类内部使用,且没有被存储(存储看RenderState的情况),而是在后面函数中马上会被用到,这种情况在C++中没有必要做成函数指针。 例:在VertexArray.js中,在addAttribute函数中为attr对象增加一个函数指针,而这个函数指针在后面bind调用。
在C++中这样处理的:
2): 函数指针被保存,供后续回调使用时, 这种情况C++须按函数指针处理。 例:JS中AutomaticUniform中的getValue要在ShaderProgram中回调
那么在C++中就要做成函数指针,然后做好后续回调工作。
六: 关于JS中的继承和多态
JS中继承关系是不明显的, 而C++采用继承和多态会显著提高编码效率,重用率,一个良好的类框架设计,有助于后续版本维护升级。
例:JS中Texture,CubeMapFrace, CubeMap 就有明显的继承关系。 对于功能相同的代码可以在子类的复用或重载。
七: 关于JS中的destroy, isDestroyed
就目前理解来看,这两个方法,是JS释放对象的, 如果一个对象释放了isDestroyed就会返回true。
C++由可以实现destroy方法,但已经有析构函数,并且析构函数会自动调用基类的析构函数。 如果再做一个Destroy方法就是好像画蛇添足。 并且destroy方法, isDestroyed方法都需要实现,如果有继承关系的情况,还需要考虑子类需要重载destroy方法。
八: 关于C++中指针使用(指向类或结构的指针)
第一种情况:在类内声明指针,一个成员变量是否声明为指针,只有一条原则:“类是否负责创建和销毁该成员变量”。
1): 该类负责该成员的生命周期, 那么这个成员变量可以声明成非指针,也可以声明成指针。
2):该类不负责成员的创建和释放,这种情况还是把成员声明成指针比较好。
第二种情况: 在函数内使用指针, 局部变量的创建不建议使用指针,尽量在栈上创建的形式, 或使用引用。
第三种情况: 在容器中使用,建议在容器中存放指针(简单类型或结构除外),而不是对象本身;
理由1:首先这种容器包括容器里的对象指针,声明周期都有具体的类负责,
理由2:避免了容器拷贝时,容器里面对象的拷贝操作;
理由3:容器往往动态增长,避免占用较大内存。
九: 关于重载操作符
在Core有大量的工具类,比如向量操作,矩阵操作等,这些工具类使用频繁,如果重载了操作符:
JavaScrip代码转C++代码的一些方法