(原創) 如何使用function template傳遞array? (C/C++) (template)

將array傳進function,在C/C++一直是很重要的課題,在C語言中,array傳進function的是pointer,但array size一直是大問題,除了compiler不做檢查外,可能還得另外傳array size(C#則不必);C++提出reference array和function template後,有更好的方式解決這個C語言的老問題。

reference array讓compiler除了檢查array element型別外,還可以檢查array size,但缺點是array size必須寫死,若透過function template,則array size不必寫死,可以處理任何array size。

 1/* 
 2(C) OOMusou 2007 http://oomusou.cnblogs.com
 3
 4Filename    : FunctionTemplate_ArrayPassToFunction.cpp
 5Compiler    : Visual C++ 8.0 / ISO C++
 6Description : Demo how to use function template & reference array pass to function
 7Release     : 02/09/2007 1.0
 8*/

 9#include <iostream>
10
11using namespace std;
12
13template <typename T, size_t N>
14void func(T (&arr)[N]) {
15  for(size_t i = 0; i != N; ++i) {
16    cout << arr[i] << endl;
17  }

18}

19
20int main() {
21  int ia[] = {0 , 12};
22  func(ia);
23}


14行array size並沒有寫死,N是個變數,而15行也可以繼續用這個變數作counting,由於function template的typename,我們不只處理任意array size的array,還可處理任意型態的array。

C#會有這個需求嗎?不會!!因為C#的array自帶GetLength() method,可以輕鬆的得到array size,所以不需使用任何特別的技巧處理。

Conclusion
透過reference array和function template,C語言對於array和function的老問題總算得到圓滿的解答。

See Also
(原創) array可以使用reference方式傳進function嗎? (初級) (C++)
(原創) array傳進function該怎麼寫才好? (初級) (C/C++)
(原創) array傳進function該怎麼寫才好? (初級) (C#)
(原創) 如何使用boost::array? (初級) (C++) (boost)

Reference
C++ Primer 4th P.633

posted on 2007-02-09 14:54 真 OO无双 阅读(...) 评论(...) 编辑 收藏

导航

统计