可以在功能参数列表中多次使用函数模板的模板参数名称

Can a template parameter name of a function template be used more than once in the function parameter list?

本文关键字:参数 函数模板 功能 列表      更新时间:2023-10-16

我在二次形状的2D阵列中发挥了此功能: rowLength == colLength

如果您通过矩形数组,则该功能将失败,因为实现不适合矩形形状:rowLength != colLength

仅使用一个模板确保数组是二次的。让编译器警告您不要矩形,因为这些参数必须等于"满足"模板系统。

我知道会有不同的解决方案,但这是我想要的。

template <std::size_t sideLength>
void functionForQuadraticArrayOnly( const int( &arr )[ sideLength ][ sideLength ] )
{// body....}

问题:此模板使用情况正确吗?是未定义的行为还是其他?

您在这里所做的事情是安全的。但是,最好知道标准中提到的一个特殊情况。

考虑以下示例:

typedef int N;
template<N X, typename N, template<N Y> class T> struct A;

在这里,X是类型intY的非类型模板参数,是与A的第二个模板参数相同类型的非类型模板参数。

请注意,Y不是类型int的非类型模板参数,因为模板参数N隐藏了typedefN

这是按照 [basic.scope.temp]/4] 的说明:

模板参数名称的声明区域嵌套在立即包含的声明区域内。[注意:结果,模板参数掩盖了任何具有相同名称的实体,封闭范围]