0

我有一个 Kd-Tree 实现,它被模板化为接受任何大于 0 的维度和任何浮点类型(浮点、双精度等)。像这样的东西:

template <typename real, size_t dimensions> class KdTree
{
    // stuff
}

而且我有一个附带的“点”类型,它具有完全相同的模板布局。然而,这种点类型需要从 kd-tree 类外部访问。现在,每次我需要在我的 kd-tree 代码中创建临时点时,我都需要显式地 go KdPoint<real, dimensions>,这很烦人,使我的行很长,并且对代码没有任何价值。

有什么办法可以告诉编译器隐式地假设任何值realdimensions传递给点的类?以某种方式将两个模板列表链接在一起。这样我就可以输入KdPoint,编译器将根据类接收到的模板参数直接知道要放什么。

否则我需要使用宏将后者显式扩展为前者,这很糟糕。

4

2 回答 2

1

您可以在KdTree类中添加 typedef:

template <typename real, size_t dimensions> class KdTree
{
  typedef KdPoint<real, dimensions> KdPoint_;
  // stuff
};

并在KdPoint_内部使用。如果您希望点类型可从外部访问,请提供typedef公共访问权限,以及一个不以 结尾的名称_

template <typename real, size_t dimensions> class KdTree
{
 public:
  typedef KdPoint<real, dimensions> KdPointType;
  // stuff
};

然后可以像这样访问它:

KdTree<float, 5>::KdPointType
于 2012-11-17T12:54:04.210 回答
1
template <typename real, size_t dimensions> class KdTree
{
    public:
    typedef KdPoint<real, dimensions> point_type;
}
于 2012-11-17T12:54:26.517 回答