gpt4 book ai didi

c++ - 标准化 2D/3D vector/坐标类

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:34:21 28 4
gpt4 key购买 nike

问题
这件事困扰了我一段时间,但我找不到明确的答案:

  • 是否有人知道将标准 2D 和/或 3D vector (具有 x、y 和 z 成员的结构)引入 STL 的提案?
  • 如果没有,是否有一种现实的方法可以让这样的类进入下一版本的标准——而不是自己编写一个完整且完美的提案?
  • 并且,是否有任何充分的理由(除了没有人有时间)为什么还没有这样做?

我绝对愿意做出贡献,但我相信我缺乏制作足够高质量的东西以被接受的经验(我不是专业程序员)。

推理/背景
到目前为止,我已经看到了几十个库和框架(无论是图形、物理、数学、导航、传感器融合……),它们基本上都实现了自己的

版本
struct Vector2d {
double x,y;
//...
};
/* ...
* operator overloads
*/

和/或其 3D 等价物 - 更不用说所有的场合,在我花时间做一个适当的、可重复使用的版本之前,我自己实现了一个。
显然,这并不困难,我也不担心次优实现,但每次我想合并两个库或重用不同项目的代码时,我都必须注意将一个版本转换为另一个版本(通过类型转换或 - 如果可能的话 - 文本替换)。

现在委员会努力显着扩展 c++17 的标准库(尤其是 2D 图形框架),我真的很想从一开始就将一个通用的 2D vector 嵌入到所有接口(interface)中,这样我就可以写例如:

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 ,它已经朝着正确的方向发展,因为它允许标准操作,例如加法和乘法,但是如果您只需要两个或三个坐标,它的权重就太大了。我认为具有固定大小且没有动态内存分配(例如基于 std::array )的 valarray 将是一个可接受的解决方案,特别是因为它会附带一个简单的迭代器实现,但我个人更喜欢带有 x, y (和 z) 成员。

备注:如果这个主题已经被讨论过,我很抱歉(如果没有,我会感到惊讶),但每次我搜索 2d vector 时,我都会得到结果说话关于类似 std::vector<std::vector<T>> 的事情或如何实现某种转型,但与标准化无关。

最佳答案

are there any good reasons (aside from no one having the time) why this hasn't already been done?

基本上没有理由这样做。

形成一个包含两个或三个元素的类型是非常简单的,所有的操作也可以简单地定义。此外,C++ 标准库无意成为一个通用的数学工具包:如果你认真对待数学类型和构造,而不是你可以放在一起的函数和运算符,那么使用专门的第三方库是有意义的半个小时。

而且我们不对不需要标准化的东西进行标准化。

如果 C++ 获得某种标准化的 3D 图形 API,那么我可以看到这种变化,但直到那时。希望 C++ 永远不会获得任何类型的标准化 3D 图形 API,因为那不是它的目的。

但是,如果您对此有强烈的感觉,可以在 std-discussion 上开始对话。所有专家(当然还有一些非专家)居住的地方;有时这样的对话会导致提案的形成,而最终撰写提案的人不一定是您。

关于c++ - 标准化 2D/3D vector/坐标类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27840374/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com