我正在编写一个简单的二维向量对象。它将拥有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方面更加紧凑,也解决了上述问题,但代价是增加了一些额外的参数和类型安全。可能还有其他我不知道的解决方案,但目前我正在考虑这些。你认为哪种方法最好?
c
,而不是c++
。 - Ismail Badawivoid *
的替代方案;因为在C或C++中,任何指针类型都可以转换为void *
,所以你可能会犯很多编译器无法捕捉到的错误。曾经有一段时间,这个问题(简短地)带有C++标签,并且更长时间使用了C++引用类型符号。如果C++相关,请考虑使用vector<vector<yourtype>>
。 - Jonathan Leffler