C 错误将参数重新发送到模板函数(矩阵参数)

C++ ERROR resending parameters to template function (matrix argument)

本文关键字:参数 函数 错误 新发送      更新时间:2023-10-16

为什么这在C 14中不起作用?这是我问题的简化示例。

#include <iostream>
using namespace std;
template <typename type, size_t size1, size_t size2>
void f1(type (&matrix)[size1][size2]){
}
void f2(size_t &size1, size_t &size2){
    double matrix[size1][size2];
    f1(matrix);
}
int main()
{
    size_t size1=100;
    size_t size2=200;
    f2(size1,size2);
    return 0;
}

main.cpp:13:14:错误:呼叫'f1(double [size1] [size2])'

没有匹配功能

谢谢!


----编辑1 ----

但是,我不确定为什么第一个示例有效而第二个示例不起作用。

示例1-> Works

template <typename type, size_t size1, size_t size2>
void f1(type (&matrix)[size1][size2]){ }

int main()
{
    double matrix[100][200];
    f1(matrix);
    return 0;
}

示例2->不工作

template <typename type, size_t size1, size_t size2>
void f1(type (&matrix)[size1][size2]){ }
int main()
{
    size_t size1=100;
    size_t size2=200;
    double matrix[size1][size2];
    f1(matrix);
    return 0;
}

----编辑2 ----

使用const

示例1-使用const 1函数 -> works

template <typename type, size_t size1, size_t size2>
    void f1(type (&matrix)[size1][size2]){ }
    int main()
    {
        const size_t size1=100;
        const size_t size2=200;
        double matrix[size1][size2];
        f1(matrix);
        return 0;
    }

示例2-使用const 2函数 ->不工作

template <typename type, size_t size1, size_t size2>
void f1(type (&matrix)[size1][size2]){
}
void f2(const size_t &size1, const size_t &size2){
    double matrix[size1][size2];
    f1(matrix);
}
int main()
{
    const size_t size1=100;
    const size_t size2=200;
    f2(size1,size2);
    return 0;
}

C 中没有可变长度数组。但是,大多数C 编译器确实支持它们作为扩展。但是,即使他们确实支持了这一点,这些数组的大小在编译时就不知道,因此不会发生模板扣除。

因此,编译器给您带来了错误,尽管我承认,这并不是最容易理解一个的错误。