C++ 使用库时的标准-使用库';s数据类型VS创建我自己的类型?

C++ 使用库时的标准-使用库';s数据类型VS创建我自己的类型?,c++,static-libraries,maintainability,C++,Static Libraries,Maintainability,我正在编写一个使用许多开源库的游戏,每个库都有自己的类型来表示3D向量:- Bullet(物理引擎库):Vector3 Ogre(一个3D渲染库):Ogre::Vector3 Eigen(矩阵操作库):Vector3d 即使是那些图书馆也很受欢迎,质量也很高,但我不想过分依赖它们 因此,我决定创建自己的名为Vect3的类型,并在它们之间创建转换器 它非常适合我的需求,因为我的游戏逻辑想要操纵Vector 3D 特别是在Vect3与物理、渲染或矩阵操作完全无关的范围内,它是有意义的 问题 我正

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

  • Bullet(物理引擎库):Vector3
  • Ogre(一个3D渲染库):Ogre::Vector3
  • Eigen(矩阵操作库):Vector3d
即使是那些图书馆也很受欢迎,质量也很高,但我不想过分依赖它们

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

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

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

问题 我正在编写一个AI模块,它大量使用特征值
对于原型,我经常使用Eigen::MatrixXf
与向量3相比,矩阵xF是一种更为复杂的结构

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

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

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

我目前的标准
  • (Strong)类型与某个库的关联程度如何?高度相关=B.

  • (强)图书馆的许可证有多慷慨?慷慨=B.

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

  • (弱)我需要多少速度?转换需要一些CPU

    • 在他的书《清洁代码》中说: 包装第三方代码始终是一个很好的实践。 Mike Finney在他的文章中引用了Martin的话,并对其进行了总结:

      • 第三方代码可以进化

      • 包装器的接口可以精确地满足应用程序的需要

      在您的情况下,我会编写自己的类来包装向量和矩阵库类。
      另一个优点是,您的代码只依赖于它真正需要的内容。

      您的答案简洁而完整。感谢