可能重复:
Use templates to get an array's size and end addressCan someone explain this template code that gives me the size of an array?(第一个答案包括将值作为编译时常量获取)
如何使用元编程获取数组的大小?多维也将受到赞赏。 所以例如,如果我将一个类型传递给这个结构(如何调用它,让我们说get_dim)我会得到:
get_dim<int>::value; //0
get_dim<int[1]>::value //1
get_dim<int[2][3]>::value //2,3
答案 0 :(得分:5)
对于一维数组,
template<typename T, size_t N>
size_t size_of_array(T (&)[N])
{
return N;
}
int arr[]={1,2,2,3,4,4,4,54,5};
cout << size_of_array(arr) << endl;
A a[] = {A(),A(), A(), A(), A()};
cout << size_of_array(a) << endl;
输出:
9
5
Ideone的完整演示:http://ideone.com/tpWk8
编辑:
另一种方式(看到你的编辑后),
template<typename T>
struct get_dim;
template<typename T, size_t N>
struct get_dim<T[N]>
{
static const int value = N;
};
int main()
{
cout << get_dim<int[100]>::value;
return 0;
}
输出:
100
编辑:
对于二维数组:
struct size2D
{
size_t X;
size_t Y;
};
template<typename T, size_t M, size_t N>
size2D size_of_array(T (&)[M][N])
{
size2D s = { M, N};
return s;
}
int arr[][5]={ {1,2,2,5,3}, {4,4,4,54,5}} ;
size2D size = size_of_array(arr);
cout << size.X <<", "<< size.Y << endl;
输出:
2, 5
答案 1 :(得分:4)
此功能存在于Boost.TypeTraits中,具体而言,boost::rank<>
和boost::extent<>
。
如果您想知道 如何,请参阅其他答案或Boost源代码。