使用库时的标准 - 使用Library的数据类型VS创建我自己的类型?

时间:2016-12-28 11:42:54

标签: c++ static-libraries maintainability

我正在编写一个使用许多开源库的游戏,每个库都有自己的类型来表示3D矢量: -

  • Bullet (物理引擎库): Vector3
  • Ogre (3D渲染库): Ogre :: Vector3
  • Eigen (矩阵操作库): Vector3d

即使是那些图书馆也很受欢迎,但我并不想太依赖这些图书馆。

因此,我决定创建一个名为 Vect3 的自己的类型,并在它们之间创建转换器。

它非常适合我的需求,因为我的游戏逻辑想要操纵Vector 3D。

特别是在 Vect3 与物理,渲染或矩阵操作无关的范围内,这是有意义的。

问题

我正在编写AI模块,它大量使用 Eigen 对于原型,我经常使用 Eigen :: MatrixXf Vector3 相比, MatrixXf 是一个复杂得多的结构。

我计划创建自己的类 MyMatrix 并重构AI以使用 MyMatrix 而不是 Eigen :: MatrixXf

我怀疑这是否是一个好的决定 换句话说,我应该为我看到和想要使用的所有内容创建自己的数据类型吗?

问题

为一个或多个外部库中已存在的类型选择其中一个选项的标准是什么? A。该类型应创建为新类 B。使用库类型(以及哪一个?)。

我目前的标准

  • (强)与某个图书馆相关的类型有多少?高度相关= B。

  • (强)图书馆的执照多么慷慨?慷慨= B。

  • (中)类型有多复杂?复杂= B。

  • (弱)我需要多少速度?转换成本有些CPU。

1 个答案:

答案 0 :(得分:2)

Robert C. Martin在他的书“清洁代码”中说: 包装第三方代码始终是一个好习惯。 迈克芬尼在他的Blog中引用马丁并总结一下:

  
      
  • 第三方代码可以发展

  •   
  • 您的包装界面可以精确地满足您的应用需求

  •   

在你的情况下,我会编写自己的类来包装vector和matrices库类。 另一个优点是你的代码只依赖于它真正需要的东西。