c++ - 将基于堆的 N 元数组引用传递给函数
问题描述
我正在尝试将 N 元数组传递给 C++ 中的函数。
保持简单,对于一维数组,这里是:
#include <iostream>
template <size_t N> int sign(int(&arr)[N], int i)
{
return (arr[i] >= 0) ? +1 : -1 ;
}
int main(int argn, char** argv)
{
const int SIZE = 2;
int (*arr1d) = new int[SIZE];
arr1d[0] = 12;
arr1d[1] = -1;
std::cout << "sign 0 : " << sign(arr1d, 0) << std::endl ;
std::cout << "sign 1 : " << sign(arr1d, 1) << std::endl ;
}
但这不会编译:
Sign.cpp:17:50: error: no matching function for call to ‘sign(int*&, int)’
std::cout << "sign 1 : " << sign(arr1d, 1) << std::endl ;
^
Sign.cpp:3:29: note: candidate: template<long unsigned int N> int sign(int (&)[N], int)
template <size_t N> int sign(int(&arr)[N], int i)
^~~~
Sign.cpp:3:29: note: template argument deduction/substitution failed:
Sign.cpp:17:50: note: mismatched types ‘int [N]’ and ‘int*’
std::cout << "sign 1 : " << sign(arr1d, 1) << std::endl ;
我不介意不使用模板(这似乎是这里的问题)。
有什么建议吗?
2D 案例的相同错误:
#include <iostream>
template <size_t M, size_t N> int sign(int(&arr)[M][N], int i, int j)
{
return (arr[i][j] >= 0) ? +1 : -1 ;
}
int main(int argn, char** argv)
{
const int SIZE = 2;
int (*arr2d)[SIZE] = new int[SIZE][SIZE];
arr2d[0][0] = 12;
arr2d[0][1] = -1;
arr2d[1][0] = 32;
arr2d[1][1] = -4;
std::cout << "sign 0 1: " << sign(arr2d, 0, 1) << std::endl ;
}
解决方案
尝试将指向数组的指针传递给您的符号函数。
template <size_t M, size_t N>
int sign(int(*arr)[N], int i, int j)
{
return (arr[i][j] >= 0) ? +1 : -1 ;
}
然后,您可以按如下方式调用您的符号函数:
std::cout << "sign 0 1: " << sign<SIZE, SIZE>(arr2d, 0, 1) << std::endl ;
推荐阅读
- c# - 统一调用精灵的 OnMouseDown() 中的子类方法
- javascript - Amazon DynamoDB DocumentClient().get() 使用函数外的值
- r - 结合 geom_points 和 geom_lines 将图例添加到多个 ggplots2
- mysql - 首先加载什么?主键还是外键?
- excel - 为什么我的 INDEX 公式不再起作用?
- c# - 查找项目列表中出现频率最高的组合
- python - Python在读取文件时忽略行
- azure - 使用 AddAzureKeyVault 使我的应用程序慢了 10 秒
- html - 为什么空 html 元素的行为与内容不同?
- javascript - 禁止位置权限时运行回调