在编译时确保C ++数组参数大小

时间:2013-11-04 23:38:21

标签: c++ arrays templates compile-time

在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;
}

或者是否有更惯用的处理方式?

1 个答案:

答案 0 :(得分:2)

如果您真的想要编译时错误,可以定义函数以获取引用:

void foo(T (&arr)[3]);