C++ 假设类模板参数

C++ 假设类模板参数,c++,templates,C++,Templates,我有一个Kd树实现,它被模板化以接受任何大于0的维度和任何浮点类型(float、double等)。大概是这样的: template <typename real, size_t dimensions> class KdTree { // stuff } KdTree<float, 5>::KdPointType 模板类KdTree { //东西 } 我有一个附带的“点”类型,它具有完全相同的模板布局。但是,需要从kd树类外部访问此点类型。现在,每次我需要在k

我有一个Kd树实现,它被模板化以接受任何大于0的维度和任何浮点类型(float、double等)。大概是这样的:

template <typename real, size_t dimensions> class KdTree
{
    // stuff
}
KdTree<float, 5>::KdPointType
模板类KdTree
{
//东西
}
我有一个附带的“点”类型,它具有完全相同的模板布局。但是,需要从kd树类外部访问此点类型。现在,每次我需要在kd树代码中创建临时点时,我都需要显式地转到
KdPoint
,这很烦人,使我的行非常长,并且不会给代码增加任何价值

有没有办法让编译器隐式地假定
real
dimensions
的值也传递给类中的点?以某种方式将两个模板列表链接在一起。这样我就可以键入
KdPoint
,编译器就可以根据类接收到的模板参数直接知道在那里放什么了


否则,我将需要使用宏来显式地将后者扩展为前者,这是一种很糟糕的方式。

您可以将typedef添加到
KdTree
类中:

template <typename real, size_t dimensions> class KdTree
{
  typedef KdPoint<real, dimensions> KdPoint_;
  // stuff
};
然后可以这样访问:

template <typename real, size_t dimensions> class KdTree
{
    // stuff
}
KdTree<float, 5>::KdPointType
KdTree::KdPointType
模板类KdTree
{
公众:
typedef KdPoint_type;
}

谢谢-对于我来说,第一个选项是最实用的。