vso*_*tco 6 c++ arrays templates c++11
我试图通过引用传递一个未知数量的维度(排名)的数组.基本上,我想做这样的事情(不编译)
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);
}
Run Code Online (Sandbox Code Playgroud)
有没有办法实现这个目标?特别是,在某种程度上可以使用可变参数模板方法吗?
我可以做泛型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);
}
Run Code Online (Sandbox Code Playgroud)
然后您可以使用 获取数组排名std::rank。
std::remove_extent您可以通过使用模板递归来获取子数组大小。
生活例子。
| 归档时间: |
|
| 查看次数: |
209 次 |
| 最近记录: |