为什么这在 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----
使用常量
示例 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/