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

问题描述 投票:1回答:1

为什么这在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 - >工作

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功能 - >工作

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++ function templates matrix arguments
1个回答
0
投票

C ++中没有可变长度数组。但是,大多数C ++编译器都支持它们作为扩展。但即使他们支持这一点,这些数组的大小在编译时也是未知的,因此模板推断不可能发生。

因此,虽然我承认,编译器会给你错误,而不是最容易理解的错误。

© www.soinside.com 2019 - 2024. All rights reserved.