通过引用传递未知秩的数组
Pass array of unknown rank by reference
我正试图通过引用传递一个未知维数(秩)的数组。基本上,我想做这样的事情(不编译)
template <typename T, int... dims>
void f(T (&arr)[dims]...) // not working
{
// would like to modify the elements of `arr` here, according to some rule
}
int main()
{
int arr[2][3][4]; // rank 3
f(arr);
}
有什么办法可以做到这一点吗?特别是,是否有可能使用可变模板方法?
我可以执行通用的template<typename T> f(T& arr)
,但在这种情况下,如何在不显式传递大小的情况下恢复大小?(即使使用可变模板方法,我也不知道如何在没有某种递归折叠的情况下恢复包中的单个元素)。
特别是,我正在寻找一种根据某些规则初始化未知秩数组的简单方法。
您只需传递对类型为T
的数组的引用。那么T
可以是另一个数组等等。不需要复杂的语法。所以你的代码看起来是这样的:
template <typename T, int sz>
void f(T (&arr)[sz]) // working
{
std::rank<T[sz]>::value; //evaluates to array rank
}
int main()
{
int arr[2][3][4]; // rank 3
f(arr);
}
然后,您可以使用std::rank
来获得数组秩。
使用std::remove_extent
和模板递归可以得到子数组的大小。
生活榜样。
相关文章:
- C++未知长度字符串的数组,其行为类似于 Python 字符串列表
- C++中数组大小未知的指针转换
- 如何定义在编译时数据未知的 const 数组
- 在C++中初始化第一维大小未知的二维数组
- 在带有模板的函数中传递未知大小的 std::数组.如何更正此代码?
- 你能让数组中的项数未知吗
- 当数组大小在C++中未知时,如何在运行时将对字符串数组的引用作为函数参数传递?
- 如何将输入到具有未知数量元素的数组中?
- 获取由空格分隔的未知大小的单行输入,并将其存储到整数数组中
- 使用 ReadProcessMemory() 将未知大小的字符数组或字符串读入 wstring 中
- 未知容器、向量或数组 c++ 的大小
- 未知大小的数组作为类成员,用于在运行时(对象创建时间)创建数组的对象
- 构造函数初始化器列表中未知长度的数组
- 在 c++ 中使用未知元素初始化的字符数组
- 特征:将数组映射到矩阵大小未知的矩阵
- 如何声明一个未知大小的数组,然后输入直到我想要,然后获取数组的大小
- 如何在 C++ 中将值附加到未知大小的数组中
- 如何确定未知类型数组的索引是否为空
- 使用数组和布尔值在输出未知时从输出中删除逗号
- 如何正确写入多维字符数组未知数量的值,但固定的字符堆