C++ 使用库时的标准-使用库';s数据类型VS创建我自己的类型?
我正在编写一个使用许多开源库的游戏,每个库都有自己的类型来表示3D向量:-C++ 使用库时的标准-使用库';s数据类型VS创建我自己的类型?,c++,static-libraries,maintainability,C++,Static Libraries,Maintainability,我正在编写一个使用许多开源库的游戏,每个库都有自己的类型来表示3D向量:- Bullet(物理引擎库):Vector3 Ogre(一个3D渲染库):Ogre::Vector3 Eigen(矩阵操作库):Vector3d 即使是那些图书馆也很受欢迎,质量也很高,但我不想过分依赖它们 因此,我决定创建自己的名为Vect3的类型,并在它们之间创建转换器 它非常适合我的需求,因为我的游戏逻辑想要操纵Vector 3D 特别是在Vect3与物理、渲染或矩阵操作完全无关的范围内,它是有意义的 问题 我正
- Bullet(物理引擎库):Vector3
- Ogre(一个3D渲染库):Ogre::Vector3
- Eigen(矩阵操作库):Vector3d
对于原型,我经常使用Eigen::MatrixXf。
与向量3相比,矩阵xF是一种更为复杂的结构 我计划创建自己的类MyMatrix,并重构AI以使用MyMatrix而不是Eigen::MatrixXf 我怀疑这是否是一个好决定。
换句话说,我应该为我看到的和想要使用的所有东西创建自己的数据类型吗 问题: 对于一个或多个外部库中已经存在的类型,选择其中一个选项的标准是什么?
A.该类型应创建为新类。
B.使用库类型(以及哪一种?) 我目前的标准
- (Strong)类型与某个库的关联程度如何?高度相关=B.
- (强)图书馆的许可证有多慷慨?慷慨=B.
- (中)类型有多复杂?复杂=B.
- (弱)我需要多少速度?转换需要一些CPU
- 第三方代码可以进化
- 包装器的接口可以精确地满足应用程序的需要
- 在他的书《清洁代码》中说:
包装第三方代码始终是一个很好的实践。
Mike Finney在他的文章中引用了Martin的话,并对其进行了总结:
另一个优点是,您的代码只依赖于它真正需要的内容。您的答案简洁而完整。感谢