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

标签 c++ function templates matrix arguments

为什么这在 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;
}

ma​​in.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----

使用常量

示例 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++ 中没有变长数组。但是,大多数 C++ 编译器都支持将它们作为扩展。但即使它们确实支持这一点,这些数组的大小在编译时也是未知的,因此无法进行模板推导。

结果编译器给了你错误,虽然我承认,这不是最容易理解的错误。

关于C++错误将参数重新发送到模板函数(矩阵参数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47877037/

相关文章:

c++ - Valgrind 将此检测为可能的内存泄漏

javascript - error.code 139 在 node.js 中运行 exec 时

python - 为什么我在 Django 通知中收到此错误?

c++ - 存储模板函数以备后用

c++ - 在 main 内声明的数组抛出堆栈溢出,在 main 外声明的数组不会

c++ - 在 C++ 中使自己的宏先于库宏

将乘号(即 "x")替换为 R 中 text() 中的 ASCII 代码

Perl 打印不正确

c - 将数组传递给函数的正确方法?

c++ - 调用不带 <> 的模板函数;类型推断