求數組的大小的慣用法示例如下:
int a[] = {1,2,3};
cout << sizeof(a) / sizeof(0[a]) << endl;
感覺boost庫中應該有這個功能, 找了好長時間, 終于找到了.
原來是boost::extent, 屬于boost::type_traits.
示例:
extent<int[4]>::value == 4
參考:
http://hi.baidu.com/redcastle/blog/item/934b232d22a24534349bf7f8.html
不過extent應該是需要一個類作為模板參數, 而我只有這個實例名a.
該怎么辦呢? boost中應該有輔助函數之類的能接受一個實例再應用extent?
上述參考文章中有個現成的方法:
template <class T>
unsigned int array_size(const T&)
{
return boost::extent<T>::value;
}
但是定義這樣一個模析函數好像太煩了, 還不如直接用sizeof()慣用法.
無意中看到boost目錄中, 就在type_traits目錄旁, 有個typeof目錄, 這應該是我所要的吧.
確實好用:
typedef BOOST_TYPEOF(a) TypeA;
cout << boost::extent<TypeA>::value << endl;
(轉載請注明來源于金慶的專欄)
int a[] = {1,2,3};
cout << sizeof(a) / sizeof(0[a]) << endl;
感覺boost庫中應該有這個功能, 找了好長時間, 終于找到了.
原來是boost::extent, 屬于boost::type_traits.
示例:
extent<int[4]>::value == 4
參考:
http://hi.baidu.com/redcastle/blog/item/934b232d22a24534349bf7f8.html
不過extent應該是需要一個類作為模板參數, 而我只有這個實例名a.
該怎么辦呢? boost中應該有輔助函數之類的能接受一個實例再應用extent?
上述參考文章中有個現成的方法:
template <class T>
unsigned int array_size(const T&)
{
return boost::extent<T>::value;
}
但是定義這樣一個模析函數好像太煩了, 還不如直接用sizeof()慣用法.
無意中看到boost目錄中, 就在type_traits目錄旁, 有個typeof目錄, 這應該是我所要的吧.
確實好用:
typedef BOOST_TYPEOF(a) TypeA;
cout << boost::extent<TypeA>::value << endl;
(轉載請注明來源于金慶的專欄)