问题
这是一件困扰我已经有些时间的事情,但我无法找到一个明确的答案:
- 是否有人知道引入标准2D和/或3D向量(具有x、y和z成员的结构)的提议?
- 如果没有,除了自己编写一个完整且完美的提案之外,还有没有现实的方法将这样的类引入到下一个标准版本中?
- 此外,除了没有人有时间之外,是否有任何充分的理由,为什么这件事还没有完成?
我肯定愿意做出贡献,但我相信我缺乏足够的经验来产生高质量的东西以被接受(我不是专业程序员)。
推理/背景
到目前为止,我已经看过数十个库和框架(无论是用于图形、物理、数学、导航、传感器融合...),它们基本上都会实现自己的版本
struct Vector2d {
double x,y;
//...
};
/* ...
* operator overloads
*/
以及/或其3D等效物——更不用说在我实现自己的版本之前,所有场合都要实现它。显然,这并不困难,我也不担心次优的实现,但每当我想要结合两个库或重用来自另一个项目的代码时,我都必须小心地将一个版本转换为另一个版本(通过强制转换或者如果可能的话-文本替换)。
现在,委员会力图显着扩展c++17的标准库(特别是使用2D图形框架),我真的希望从一开始就将通用的2D向量嵌入到所有接口中,这样我就可以写:
drawLine(transformCoordinates(trackedObject1.estimatePos(),params),
transformCoordinates(trackedObject2.estimatePos(),params));
而不是
MyOwnVec2D t1{trackedObject1.estimatePosX(), trackedObject1.estPosY()};
MyOwnVec2D t2{trackedObject2.estimatePosX(), trackedObject2.estPosY()};
t1 = transformCoordinates(t1,params);
t2 = transformCoordinates(t2,params);
drawLine(t1.x,t1.y,t2.x,t2.y);
这个例子可能有点夸张,但我认为它表明了我的观点。
我知道std::valarray已经朝着正确的方向发展,因为它允许像加法和乘法这样的标准操作,但如果你只需要两个或三个坐标,它会带来太多负担。我认为一个具有固定大小且没有动态内存分配的valarray(例如基于std::array)将是一种可接受的解决方案,特别是因为它将提供一个微不足道的迭代器实现,但我个人更喜欢一个具有x、y(和z)成员的类。
备注:如果这个主题已经被讨论过了(如果没有,我会很惊讶),那么我很抱歉,但每次我搜索2d向量时,我都会得到关于std::vector>之类的结果,或者如何实现某个转换,但没有关于标准化的内容。