问题
这有点困扰我一段时间了,但我找不到明确的答案:
我绝对愿意做出贡献,但我相信我缺乏足够高质量的东西才能被接受(我不是专业程序员)。
推理/背景
到目前为止,我已经看到了几十个库和框架(无论是图形,物理,数学,导航,传感器融合等......)都基本上都是实现了自己的版本
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<std::vector<T>>
这样的事情,或者如何实现某种转变,但没有关于标准化的话题。
答案 0 :(得分:4)
有没有充分的理由(除了没有人有时间)为什么还没有这样做?
基本上没有理由。
形成包含两个或三个元素的类型是完全无关紧要的,并且所有操作也可以简单地定义。此外,C ++标准库并不是一个通用的数学工具套件:如果您认真考虑数学类型和构造超出函数和运算符,那么使用专用的第三方库是有意义的。半小时。
我们并没有标准化那些不需要标准化的事情。
如果C ++要获得某种标准化的3D图形API,那么我可以看到这种变化,但直到那时。希望C ++永远不会获得任何标准化的3D图形API,因为它不是它的用途。
但是,如果您对此感到强烈,可以在std-discussion开始对话,所有专家(以及一些肯定非专家)都会在这里进行对话;有时这样的对话会导致提案的形成,并且最终不一定是你最终写出来的。
答案 1 :(得分:1)
如果其他人对此感兴趣,我想指出2014年7月版"A Proposal to Add 2D Graphics Rendering and Display to C++"包含2D点类/结构(我的问题基于2014年1月的初稿)。所以也许在c ++ 1z中至少会有一个简单的标准2D-Vector。