【发布时间】:2013-08-24 18:54:51
【问题描述】:
我正在编写一个简单的二维矢量对象。它将具有 x 和 y 分量,以及长度、叉积等方法。问题是,我希望结构具有许多可能的类型(char、int、float、double 等)。我想知道在设计方面与对象交互的最佳选择是什么?这是我目前正在考虑的:
1.让用户将矢量对象传递给专门的函数,例如:
Vector2Dt_Dot(Vec2Dt* vector1, Vec2Dt* vector2);
其中“t”是向量的类型。但是,这种方法的问题是它不允许不同类型相互交互,所以我不能说计算浮点向量2d 和双向量2d 的点积。第二种方法,以及我的倾向:
2。让用户将向量对象作为 void 指针及其类型传递,例如:
Vector2D_Dot(void* vector1, unsigned vector1_type, void* vector2, unsigned vector2_type);
显然,这种方法在 API 方面更紧凑,也解决了上述问题,但代价是一些额外的参数和类型安全。
可能还有其他我不知道的解决方案,但这些是我目前正在考虑的解决方案。您认为最好的方法是什么?
【问题讨论】:
-
@WhozCraig 问题被标记为
c,而不是c++ -
不要使用
void *替代;有太多方法可以使编译器无法捕捉到错误(因为任何指针类型都可以转换为void *,在 C 或 C++ 中)。曾经,这个问题(简要地)有一个 C++ 标记,并且在较长时间内使用 C++ 引用类型表示法。如果 C++ 是相关的,请考虑vector<vector<yourtype> >。 -
@johnathan leffler:是的,那是我的错误。我经常在 C 和 C++ 之间切换。如果它是 C 中的一个选项,我肯定会使用类似矢量的接口。
标签: c