假定类模板参数
Assume class template arguments
本文关键字:参数 更新时间:2023-10-16
我有一个Kd-Tree实现,它被模板化以接受任何大于0的维度和任何浮点类型(浮点、双精度等)
template <typename real, size_t dimensions> class KdTree
{
// stuff
}
我有一个附带的"点"类型,它有完全相同的模板布局。但是,需要从kd树类外部访问此点类型。现在,每次我需要在kd树代码中创建临时点时,我都需要显式地使用KdPoint<real, dimensions>
,这很烦人,使我的行很长,并且不会给代码增加任何值。
有没有什么方法可以告诉编译器隐式地假设real
和dimensions
的值也传递给了点的类?在某种程度上将两个模板列表链接在一起。这样,我只需键入KdPoint
,编译器就可以根据类接收到的模板参数直接知道要在其中放入什么。
否则,我需要使用宏将后者显式扩展为前者,这有点糟糕。
您可以将typedef添加到KdTree
类:
template <typename real, size_t dimensions> class KdTree
{
typedef KdPoint<real, dimensions> KdPoint_;
// stuff
};
并在内部使用CCD_ 6。如果您希望点类型可以从外部访问,请为typedef
提供公共访问权限,并提供一个不以_
:结尾的名称
template <typename real, size_t dimensions> class KdTree
{
public:
typedef KdPoint<real, dimensions> KdPointType;
// stuff
};
然后可以这样访问:
KdTree<float, 5>::KdPointType
template <typename real, size_t dimensions> class KdTree
{
public:
typedef KdPoint<real, dimensions> point_type;
}
相关文章:
- 如何反转整数参数包
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 如何使用默认参数等选择模板专业化
- 模板参数替换失败,并且未完成隐式转换
- 具有默认模板参数的多态类的模板推导失败
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 函数调用中参数的顺序重要吗
- 部分定义/别名模板模板参数
- 模板-模板参数推导:三个不同的编译器三种不同的行为
- 使用不带参数的函数访问结构元素
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 如何使用Luacneneneba API正确读取字符串和表参数
- 在派生函数中指定void*参数
- 视图中的参数推导失败:take_while
- static_assert在宏中,但也可以扩展到可以用作函数参数的东西
- 使用指向成员的指针将成员函数作为参数传递
- 没有名称的C++模板参数
- 如何将enable-if与模板参数和参数包一起使用