我正在尝试通过引用传递未知维数(等级)的数组。基本上,我想做这样的事情(不编译)
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
获取子数组大小和模板递归。
生活 example .
关于c++ - 通过引用传递未知等级的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29419198/