【发布时间】:2021-12-04 20:22:52
【问题描述】:
我想在 C++ 中有一个通用的 KDTree 实现,它可以容纳任何类型的 positionable 对象。此类对象具有 2D 位置。
不幸的是。可定位类可能有不同的获取位置的方式。
- 吸气剂
getX()和getY() - std::pair
- sf::Vector2f
- ...
将这些类包装到我的 KDTree 中的正确方法是什么?
我的树由以下节点组成:
template <typename T>
struct Node {
int id;
T element;
Node *left, *right;
Node(T element) : element(element), left(NULL), right(NULL)
{
static int id = 0;
this->id = id++;
}
};
不知何故,我希望有一个通用的 getter 到 T element 的位置。
一种可能的解决方案是定义一个可定位的接口:
struct KDTreeElement {
virtual getX() = 0;
virtual getY() = 0;
}
这种方法的缺点是可定位元素必须知道KDTree库
有什么选择?
【问题讨论】: