c++ - 将基于堆的 N 元数组引用传递给函数

标签 c++ arrays templates

我正在尝试将 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 ;

我不介意使用模板(这似乎是这里的问题)。

有什么建议吗?


二维情况下的相同错误:

#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++ - 将基于堆的 N 元数组引用传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54519958/

相关文章:

c++ - 为什么我的日志在 std 命名空间中?

c++ - 我想在 Delphi/WIN32 中使用 Infocardapi.dll 但想要它的头文件

c++ - rtai no such file or directory 错误编译

Javascript Simon Game,如何检查答案

javascript - 这是哪个模板lang `<?js`

c++ - 模板函数作为模板参数

c++ - 如何将istream的指针移动n个字符?

javascript - 如何在 JavaScript 中使用两个数组创建对象文字数组

c - 尝试从文件中打印数组

c++ - 从继承类 C++ 获取模板类型