问题现在
这个问题困扰着我,但我无法找到明确的答案:
我绝对愿意做出贡献,但我相信我缺乏足够高质量的东西才能被接受(我不是专业程序员).
推理/背景
到现在为止,我已经看到了几十个库和框架(无论是图形,物理,数学,导航,传感器融合等......)都基本上都是实现了自己的版本
struct Vector2d {
double x,y;
//...
};
/* ...
* operator overloads
*/
Run Code Online (Sandbox Code Playgroud)
和/或它的3D等价物 - 更不用说在我花时间做一个合适的,可重复使用的版本之前我自己实现的所有场合.
显然,这并不困难,我不担心次优的实现,但每次,我想组合两个库或重用来自不同项目的代码,我必须注意将一个版本转换为另一个版本(通过铸造或 - 如果可能 - 文本替换).
既然委员会正在努力扩展c ++ 17的标准库(特别是使用2D图形框架),我真的希望从一开始就将一个共同的2D向量融入所有接口,所以我可以编写例如:
drawLine(transformCoordinates(trackedObject1.estimatePos(),params),
transformCoordinates(trackedObject2.estimatePos(),params));
Run Code Online (Sandbox Code Playgroud)
而不是
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);
Run Code Online (Sandbox Code Playgroud)
这个例子可能有点夸张,但我认为这表明了我的观点.
我知道std::valarray,它已经朝着正确的方向前进,因为它允许标准操作,如加法和乘法,但如果你只需要两个或三个坐标,它就会带来太多的重量.我认为具有固定大小且没有动态内存分配(例如基于std::array)的valarray 将是一个可接受的解决方案,特别是因为它将带有一个简单的迭代器实现,但我个人更喜欢具有x,y(和z)的类成员.
备注:如果这个话题已经讨论过了,我很抱歉(如果没有,我会感到惊讶),但每次我搜索2d向量时,我都会得到结果,std::vector<std::vector<T>>或者如何实现某个转换,但没有关于标准化的主题.
有没有什么充分的理由(除了没有人有时间)为什么还没有这样做?
基本上没有理由这样做。
形成包含两个或三个元素的类型是非常简单的,并且所有操作也可以简单地定义。此外,C++ 标准库并不是旨在成为通用数学工具套件:如果您认真对待数学类型和结构,而不仅仅是可以组合在一起的函数和运算符,那么使用专门的第三方库是有意义的。半小时。
我们不会标准化不需要标准化的东西。
如果 C++ 获得某种标准化的 3D 图形 API,那么我可以看到这种情况发生变化,但直到那时。希望 C++ 永远不会获得任何类型的标准化 3D 图形 API,因为这不是它的用途。
但是,如果您对此有强烈的感觉,您可以在标准讨论上开始对话,所有专家(当然还有一些肯定是非专家)都在那里;有时,这样的对话会导致提案的形成,而最终不一定是你来写。