使用运行时指定尺寸的升压几何
Using boost geometry with dimension specified at runtime
boost::geometry::model::point 将点的维度作为编译时参数。例如,
typedef bg::model::point<float, 2, bg::cs::cartesian> point;
是否有任何方法可以在 运行 时间指定维度,比如说,取决于给程序的输入?
我的目标是在 boost::geometry::index 中使用具有任意维度的 rtree 数据结构。是否可以使用此功能编写自定义点 class,或者类型系统会阻止我这样做吗?
没办法,图书馆帮忙
您始终可以使用自己的类型擦除。这将需要一些努力,并且取决于它的执行方式,可能需要一些性能。
这实际上也是库设计不 "jell" 的原因。该库通过通用性强烈关注性能。
与您的预期相反,它不支持运行时多态性,因为那会影响性能。相反,使用严格的编译时多态性。编译器可以内联和 "see through" 所有代码路径以生成最佳代码。
我不确定为什么这个问题的答案 "not possible" 被接受了。这个问题只是问这是否可能,而不是它是高性能的还是平庸的。我目前在 classes 中使用支持 [1-6] 维度的 boost::geometry
rtree 数据结构作为内部容器。
template <typename T, std::size_t N>
using BoostHyperPoint = bg::model::point<T, N, bg::cs::cartesian>;
您几乎可以像上面那样简单地定义这样一个模板化点。稍加努力,你就可以拥有一个通用的 rtree class.
boost::geometry::model::point 将点的维度作为编译时参数。例如,
typedef bg::model::point<float, 2, bg::cs::cartesian> point;
是否有任何方法可以在 运行 时间指定维度,比如说,取决于给程序的输入?
我的目标是在 boost::geometry::index 中使用具有任意维度的 rtree 数据结构。是否可以使用此功能编写自定义点 class,或者类型系统会阻止我这样做吗?
没办法,图书馆帮忙
您始终可以使用自己的类型擦除。这将需要一些努力,并且取决于它的执行方式,可能需要一些性能。
这实际上也是库设计不 "jell" 的原因。该库通过通用性强烈关注性能。
与您的预期相反,它不支持运行时多态性,因为那会影响性能。相反,使用严格的编译时多态性。编译器可以内联和 "see through" 所有代码路径以生成最佳代码。
我不确定为什么这个问题的答案 "not possible" 被接受了。这个问题只是问这是否可能,而不是它是高性能的还是平庸的。我目前在 classes 中使用支持 [1-6] 维度的 boost::geometry
rtree 数据结构作为内部容器。
template <typename T, std::size_t N>
using BoostHyperPoint = bg::model::point<T, N, bg::cs::cartesian>;
您几乎可以像上面那样简单地定义这样一个模板化点。稍加努力,你就可以拥有一个通用的 rtree class.