(原創) 如何使用boost::array? (C/C++) (template) (boost)
看到C#的array自帶GetLength()很羨慕嗎?boost::array也自帶size()喔!!
由於boost::array自帶size(),所以當傳進function時,可以不需將array size當參數傳進function。
1
/*
2
(C) OOMusou 2007 http://oomusou.cnblogs.com
3![](/Images/OutliningIndicators/InBlock.gif)
4
Filename : boostArraySize.cpp
5
Compiler : Visual C++ 8.0 / ISO C++ (boost)
6
Description : Demo how to use boost array pass to function
7
Release : 02/25/2007 1.0
8
*/
9
#include <iostream>
10
#include <boost/array.hpp>
11
#include "conio.h"
12![](/Images/OutliningIndicators/None.gif)
13
using namespace std;
14
using namespace boost;
15![](/Images/OutliningIndicators/None.gif)
16
template<size_t N>
17
void func(array<int,N> ia) {
18
for(int i = 0; i != ia.size(); ++i) {
19
cout << ia[i] << endl;
20
}
21
}
22![](/Images/OutliningIndicators/None.gif)
23
int main() {
24
array<int, 3> ia = {0 , 1, 2};
25
func(ia);
26
27
getch();
28
}
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
2
![](/Images/OutliningIndicators/InBlock.gif)
3
![](/Images/OutliningIndicators/InBlock.gif)
4
![](/Images/OutliningIndicators/InBlock.gif)
5
![](/Images/OutliningIndicators/InBlock.gif)
6
![](/Images/OutliningIndicators/InBlock.gif)
7
![](/Images/OutliningIndicators/InBlock.gif)
8
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
9
![](/Images/OutliningIndicators/None.gif)
10
![](/Images/OutliningIndicators/None.gif)
11
![](/Images/OutliningIndicators/None.gif)
12
![](/Images/OutliningIndicators/None.gif)
13
![](/Images/OutliningIndicators/None.gif)
14
![](/Images/OutliningIndicators/None.gif)
15
![](/Images/OutliningIndicators/None.gif)
16
![](/Images/OutliningIndicators/None.gif)
17
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
18
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
19
![](/Images/OutliningIndicators/InBlock.gif)
20
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
21
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
22
![](/Images/OutliningIndicators/None.gif)
23
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
24
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
25
![](/Images/OutliningIndicators/InBlock.gif)
26
![](/Images/OutliningIndicators/InBlock.gif)
27
![](/Images/OutliningIndicators/InBlock.gif)
28
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
執行結果
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
18行
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
我們看到ia自帶size()
25行
![](/Images/OutliningIndicators/None.gif)
也沒有傳array size進去。
Conclusion
C/C++傳統須另外將array size當參數傳進function的缺點,現在有兩種方式解決,一種是使用function template,請參閱(原創) 如何使用function template傳遞array?(C/C++) (template),一種就是本文所使用的boost:array。
See Also
(原創) array傳進function該怎麼寫才好? (C/C++)
(原創) 如何使用function template傳遞array? (C/C++)