【发布时间】:2013-11-15 18:15:22
【问题描述】:
在 C++ 编译时,无论如何要确保数组参数的长度?这样:
void foo(T arr[3]);
int main()
{
T a[5] = { /* ... */ };
foo(arr);
return 0;
}
会产生编译时错误吗?
是使用模板类型确保这一点的唯一方法
template <int N, class T>
struct Array{
T arr[N];
};
void foo(Array<3, T> &arr);
int main()
{
Array<5, T> a;
foo(a);
return 0;
}
或者有没有更惯用的方法来处理这个问题?
【问题讨论】:
-
不要创建它。它已经为您完成了:
std::array/boost::array。不过,这是正确的解决方案。 -
我只是在做了一些更深入的谷歌搜索后才发现。我似乎找不到多维数组的解决方案。 C++11 风格的 typedef 是否正确:
template<class T, int N, int M> using array2d = array<array<T, M>, N>
标签: c++ arrays templates compile-time