C ++ ERROR将参数重新发送到模板函数(矩阵参数)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C ++ ERROR将参数重新发送到模板函数(矩阵参数)相关的知识,希望对你有一定的参考价值。
为什么这在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 ++中没有可变长度数组。但是,大多数C ++编译器都支持它们作为扩展。但即使他们支持这一点,这些数组的大小在编译时也是未知的,因此模板推断不可能发生。
因此,虽然我承认,编译器会给你错误,而不是最容易理解的错误。
以上是关于C ++ ERROR将参数重新发送到模板函数(矩阵参数)的主要内容,如果未能解决你的问题,请参考以下文章
将一个函数模板的模板参数映射到另一个函数模板的参数(c ++)
springboot怎么将oauth2的参数通过http发送