使用具有在运行时指定的维度的boost几何

时间:2015-12-01 11:22:55

标签: c++ boost boost-geometry r-tree

boost :: geometry :: model :: point将点的维度作为编译时参数。例如,

typedef bg::model::point<float, 2, bg::cs::cartesian> point;

有没有办法在运行时指定维度,比如,取决于给程序的输入?

我的目标是在boost :: geometry :: index中使用任意维度的rtree数据结构。是否可以使用此功能编写自定义点类,或者类型系统是否会阻止我这样做?

2 个答案:

答案 0 :(得分:1)

图书馆为此提供了便利。

您可以随时使用自己的类型擦除。这将需要一些努力,并且取决于它的执行方式,可能还有一些表现。

这实际上也是这并不是因为它没有&#34; jell&#34;与图书馆设计。该库通过通用性强调强烈表现。

与您的预期相反,这不支持运行时多态性,因为这会妨碍性能。相反,使用严格的编译时多态性。编译器可以内联和&#34;通过&#34;生成最佳代码的所有代码路径。

答案 1 :(得分:0)

我不确定为什么对此问题回答“不可能”。这个问题只是问这是否可能,而不是表现出色或中等。我目前正在使用boost::geometry的rtree数据结构来支持[1-6]维作为类中的内部容器。

template <typename T, std::size_t N>
using BoostHyperPoint = bg::model::point<T, N, bg::cs::cartesian>;

您几乎可以像上面那样简单地定义一个模板化点。稍加努力,您就可以拥有通用的rtree类。