我正在编写一个使用许多开源库的游戏,每个库都有自己的类型来表示 3D vector :-
- Bullet(物理引擎库):Vector3。
- Ogre(3D 渲染库):Ogre::Vector3。
- Eigen(矩阵操作库):Vector3d。
即使那些库也很受欢迎且质量很高,但我不想过分依赖它们。
因此,我决定创建我自己的名为 Vect3 的类型,并在它们之间创建转换器。
它非常适合我的需求,因为我的游戏逻辑想要操纵 Vector 3D。
特别是在 Vect3 与物理、渲染或矩阵操作完全无关的范围内。
问题
我正在编写一个大量使用 Eigen 的 AI 模块。
对于原型(prototype),我经常使用 Eigen::MatrixXf。
MatrixXf 是一个比 Vector3 复杂得多的结构。
我计划创建自己的类 MyMatrix 并重构 AI 以使用 MyMatrix 而不是 Eigen::MatrixXf。
我怀疑这是否是一个好的决定。
换句话说,我是否应该为我看到和想要使用的所有东西创建我自己的数据类型?
问题
为一个或多个外部库中已存在的类型选择这些选项之一的标准是什么?
A. 类型应创建为新类。
B.使用库类型(哪个?)。
我目前的标准
(Strong) 与某个库相关的类型有多少?高度相关 = B.
(Strong) 图书馆的许可如何慷慨?慷慨 = B.
(中等)类型有多复杂?复杂 = B.
(弱)我需要多少速度?转换会消耗一些 CPU。
最佳答案
Robert C. Martin在他的书 Clean Code 中说: 包装第 3 方代码始终是一个好习惯。 迈克芬尼在他的 Blog 中引用了马丁的话。总结一下:
The third party code can evolve
Your wrapper's interface can be made to precisely suit your application's needs
在您的情况下,我会编写自己的类来包装 vector 和矩阵库类。 另一个优势是您的代码只依赖于它真正需要的东西。
关于c++ - 使用库时的标准 - 使用库的数据类型 VS 创建我自己的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41361386/