函数模板中的数组类型推导
Array type deduction in a function template
我有一个模板方法如下:-
template<typename T, int length>
void ProcessArray(T array[length]) { ... }
然后我有使用上述方法的代码:-
int numbers[10] = { ... };
ProcessArray<int, 10>(numbers);
我的问题是为什么我必须显式指定模板参数。不能自动推断,以便我可以按如下方式使用:-
ProcessArray(numbers); // without all the explicit type specification ceremony
我确定我错过了一些基本的东西!饶了一把锤子!
不能按值传递数组。在函数参数中T array[length]
与T* array
完全相同。没有长度信息可供推断。
如果你想按值获取数组,你需要类似 std::array
.否则,您可以通过引用来获取它,这不会丢失大小信息:
template<typename T, int length>
void ProcessArray(T (&array)[length]) { ... }
您缺少正确的参数类型: 数组只能通过引用传递:
template <typename T, unsigned int N>
void process_array(T (&arr)[N])
{
// arr[1] = 9;
}
double foo[12];
process_array(foo); // fine
相关文章:
- C++默认情况下,指针类型数组的元素是否保证初始化为 nullptr?
- 类型数组?
- 如何在使用 make_unique<T[]>() 制作的模板类型数组上使用 std::fill?
- 将基本类型数组中的内存重新用于不同(但仍然是基本)类型的数组合法吗
- 在C++中返回基元类型数组(Java比较)
- 如何返回 QVariant 类型数组
- 如何在本机 c++ jni 中实现 java 类型数组
- 模板类型数组的模板类型数组
- 如何确定未知类型数组的索引是否为空
- 复杂类型数组的静态初始化
- 访问基类型数组成员(Int-to-type习惯用法)
- 如何将 char 类型数组传递给函数并将第一个字符数组复制到第二个图表数组并使用 c++ 进行比较
- 如何在C 中制作结构类型数组
- 如何创建结构类型数组的地图对象
- C++类类型数组
- C++中的Matlab类型数组
- 节点C++插件 - 当类型数组(Float32Array)作为参数传递时,如何访问它?
- 如何将二维字符类型数组逐行保存到 c 中的.txt文件中
- C++:用户定义的类型数组出错
- 在双精度类型数组中使用 memset()