c++ - C ++中的动态嵌套数组导致无法将大括号括起来的初始化列表转换为int
问题描述
我写了一个函数,它接受一个动态长度数组但内部数组大小固定,函数中的第二个参数是父数组的长度。但是,当我尝试访问嵌套值时,我遇到了上面提到的问题。
void myFunc(int arrOfArr, int arrOfArrLen) {
// try to access
arrOfArr[0][1]; // expect val2
}
示例用法
myFunc(
{
{val1, val2},
{val3, val4}
},
2
);
编辑:我意识到“上下文”显然一个整数没有索引,但这就是你声明一个数组的方式......(在Arduino上下文中确实如此)但显然它仍然是C++
这是 Google 返回的第一个沙箱中的上述可运行演示
更新
我确实找到了一个解决方案,它很丑但它有效:
我没有将“原始”嵌套数组作为参数传递,而是首先将其设置为变量,例如:
int arrOfArr[][3] = {
{val1, val2},
{val3, val4}
}
然后在函数中我做同样的事情
void myFunc(int arrOfArr[][3], int arrOfLen) {
// access
}
叫它
myFunc(arrOfArr, 2);
正如我所说,它很丑但对我有用,这是一个传递项目的东西,而不是低级开发,也许以后会完全学习它,但在日常工作中不需要。
编辑:显然我最初试图做的事情,例如。嵌入初始化列表作为参数不起作用。
解决方案
如果你想传递一个嵌套数组,声明可能是:
template<size_t N>
void myFunc(int const arrOfArr[][N], int arrOfArrLen) {
// ...
}
如果N
已经决定,您可以删除模板参数。
const size_t N = 3;
void myFunc(int const arrOfArr[][N], int arrOfArrLen) {
// ...
}
但是如果你传递一个大括号括起来的初始化器它不起作用,你可以添加一个重载函数:
template<size_t M, size_t N>
void myFunc(int const (&arrOfArr)[M][N], int arrOfArrLen){
// attention: int *const*
// ...
}
推荐阅读
- python - 我将如何循环一个 python 文件以无限期地打开另一个 python 文件?
- c# - Blazor 组件需要修改父组件的值
- pandas - Pandas:使用 DatetimeIndex 将时间序列列转换为多索引
- reactjs - 使用模板使用数据响应表单获取填充 Datatable 列
- python - 在 python 中加载和调整多个 STL 文件
- c - CS50 凯撒在非数字输入后不退出
- python - 如何让这个 SVM 在 python 中运行得更快
- haskell - 从动态作用域更改为静态作用域/词法作用域
- java - 跨多个 Maven 存储库传递地解析工件的下载 URL
- html - 如何固定移动视图的按钮大小