可以在功能参数列表中多次使用函数模板的模板参数名称
Can a template parameter name of a function template be used more than once in the function parameter list?
我在二次形状的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
是类型int
和Y
的非类型模板参数,是与A
的第二个模板参数相同类型的非类型模板参数。
请注意,Y
是不是类型int
的非类型模板参数,因为模板参数N
隐藏了typedef
的N
。
这是按照 [basic.scope.temp]/4]
的说明:
模板参数名称的声明区域嵌套在立即包含的声明区域内。[注意:结果,模板参数掩盖了任何具有相同名称的实体,封闭范围]
相关文章:
- 当函数模板参数是具有默认参数的类模板时,函数模板参数的推导如何执行
- 具有常量引用参数的函数模板专用化
- 使用可变参数函数作为模板参数
- std::span<const T> 作为函数模板中的参数
- 如何在C++中伪造虚拟可变参数函数模板?
- C++ std::functional 中的可变参数函数模板
- 可变参数函数模板不能很好地使用 std::function 作为参数
- 三个参数函数模板令人困惑的示例
- 父可变参数函数模板专门用于子级
- C++如何将可变参数函数模板的参数包 -> 包装到 lambda 中
- 将函数传递给可变参数函数模板
- 为什么可变参数函数模板中的这个 constexpr 不是常数?
- 将多个初始值设定项列表传递到可变参数函数模板时遇到问题
- 依赖类型不明确的 c++11 可变参数函数模板重载是否不明确
- 操作可变参数函数模板的函数参数
- C++11 中的非类型可变参数函数模板
- 将可变参数函数模板的每个参数传递给返回void的函数
- 包扩展不在最后一个参数中的可变参数函数模板
- 将可变参数函数模板参数存储到联合向量中的最有效方法
- Clang 和 GCC 在解决可变参数函数模板重载时的行为不同