【发布时间】:2022-01-23 17:27:28
【问题描述】:
这是我遇到的问题的一个示例:
#include <stdio.h>
#include <iostream>
template<std::size_t U, std::size_t V>
void func2(int (&twoDArrayA)[U][V], const int shift){
const int length = 1 << shift;
int twoDArrayB[length][length]; //Successful
}
//template<std::size_t A> <-- Tried to solve the problem by adding this
void func1(const int shift){
const int length = 1 << shift;
int twoDArrayA[length][length]; //Failed
func2(twoDArrayA,shift);
}
int main() {
const int shift = 3;
func1(shift);
}
错误信息:
错误:没有匹配函数调用 'func2(int [length][length], const int&)' 模板参数扣除/替换失败: 可变大小数组类型“int”不是有效的模板参数
我以为是因为在func2之前使用了模板,所以我尝试在func1上做同样的事情。尝试调用 func1 反而失败了。错误信息:
错误:没有匹配函数调用 'func1(const int&)' 模板参数扣除/替换失败: 无法推导出模板参数'A'
有什么方法可以将 twoDArrayA 这样的参数传递给 func2?
【问题讨论】:
-
简单地使用
std::vector<T>而不是滚动你自己的东西怎么样? -
关于 "
int twoDArrayA[length][length]; //Failed" - 你可能会觉得这很有趣:Why aren't variable-length arrays part of the C++ standard? -
这不会使您的数组成为可变长度数组。这仍然是固定长度的,因为编译器在编译时评估这两个模板参数。模板方法不能在任何情况下都替代
std::vector。
标签: c++ arrays templates multidimensional-array