使用在运行时指定尺寸的boost几何体

Using boost geometry with dimension specified at runtime

本文关键字:boost 几何体 运行时      更新时间:2023-10-16

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

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

有没有任何方法可以在运行时指定尺寸,比如说,根据程序的输入?

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

没有办法,因为库提供了便利。

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

事实上,这也是它不能与库设计"结合"的原因。该库通过泛型非常关注性能。

与您预期的相反,这不支持运行时多态性,因为这会妨碍性能。相反,使用了严格的编译时多态性。编译器可以内联并"透视"所有代码路径,以生成最佳代码。

我不知道为什么这个问题的答案"不可能"被接受。这个问题只是问这是否可能,而不是表现或平庸。我目前在类中使用支持[1-6]维度的boost::geometry的rtree数据结构作为内部容器。

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

您几乎可以像上面那样简单地定义这样一个模板化的点。只要多花一点力气,就可以拥有一个通用的rtree类。