【发布时间】:2010-01-14 23:50:38
【问题描述】:
现在,说真的……我将避免在这里使用坏词,因为我们正在谈论 Boost 研究员。这么看肯定是我的错,但我不明白为什么,所以在这里问一下;也许有人可以在这件事上启发我。就是这样:
uBLAS 有一个名为 bounded_vector<> 的不错的类模板,用于创建固定大小的向量(或者我是这么认为的)。
来自 Effective uBLAS wiki (http://www.crystalclearsoftware.com/cgi-bin/boost_wiki/wiki.pl?Effective_UBLAS):
默认的 uBLAS 向量和矩阵类型是可变大小的。许多线性代数问题涉及具有固定大小的向量。 2和3元素在几何中很常见!固定大小的存储(类似于 C 数组)可以有效地实现,因为它不涉及与动态存储相关的开销(堆管理)。 uBLAS 通过将向量/矩阵的底层存储从默认的“unbounded_array”更改为“bounded_array”来实现固定大小。
好吧,这个bounded_vector<> 的东西是用来让你免于将向量的底层存储指定为指定大小的bounded_array<>。在这里我问你:看起来这个有界向量的东西对你来说不是固定大小的吗?好吧,它没有。
起初我觉得被 wiki 背叛了,但后来我重新考虑了“有界”的含义,我认为我可以让它过去。但如果你和我一样(我仍然不确定),仍然想知道这是否有意义,我发现bounded_vector<> 实际上可以调整大小,它可能只是不会更大 比作为模板参数指定的大小。
- 那么,首先,您认为他们有充分的理由不制作真正的>>固定
- 您认为将这个 bounded(与 fixed-size 相反)向量“出售”给我图书馆的用户作为“fixed- size”向量替换,甚至命名为“Vector3”或“Vector2”,就像 Effective uBLAS wiki 所做的那样?
- 你认为我应该为此目的以某种方式实现一个固定大小的向量吗?如果是这样,怎么做? (抱歉,我对 uBLAS 真的很陌生;今天刚试过)
- 我正在开发一款 3D 游戏。 uBLAS 是否应该用于其中涉及的计算(“嘿,几何学!”,根据 Effective uBLAS wiki)?如果没有,您会建议什么替代品?
--编辑
以防万一,是的,我已阅读此警告:
需要注意的是,这只改变了 uBLAS 用于 vector3 的存储。 uBLAS 仍将使用所有相同的算法(假设大小可变)来操作向量3。实际上,这似乎对速度没有负面影响。上面的运行速度与不使用 uBLAS 的手工制作的 vector3 一样快。唯一的负面影响是 vector3 总是存储一个“大小”成员,在这种情况下是多余的[或者不是吗?我的意思是......]。
我看到它使用相同的算法,假设一个可变大小,但如果一个操作要实际改变它的大小,它不应该停止(断言)吗?
ublas::bounded_vector<float,3> v3;
ublas::bounded_vector<float,2> v2;
v3 = v2;
std::cout << v3.size() << '\n'; // prints 2
哦,拜托,这不就是单纯的背叛吗?
【问题讨论】:
标签: game-engine ublas