模板引數可以是數值型引數。也就是非型別引數。如下圖所示:
我們可以像上面定義乙個區域性陣列,但是卻不能這樣定義:
int n=10;
func<
double
,n>()
;
上面這種寫法就是錯的!!!
實際上,不光是型別引數不能為數值型模板引數,下面幾種情況也不能作為模板引數
實際上,數值型模板引數是必須在編譯階段被處理的單元,因此在編譯階段數值型模板引數必須被準確無誤的確定。向上面的變數,類物件等,都是只有在執行的時候才能夠被確定的,所以不能作為數值型模板的引數。
以下使用c++的模板技術,實現乙個通用的陣列類。並給出建立的例項。從而更加深刻的理解模板技術。(具體**比較簡單就不分析了,主要理解使用模板技術編寫一些通用的類如何實現。)
heaparray.h
#ifndef _heaparray_h_
#define _heaparray_h_
template
<
typename t >
class
heaparray
;template
<
typename t >
heaparray
::heaparray
(int len)
template
<
typename t >
bool heaparray
::construct()
template
<
typename t >
heaparray
* heaparray
::newinstance
(int length)
return ret;
}template
<
typename t >
int heaparray
::length()
template
<
typename t >
bool heaparray
::get
(int index, t& value)
return ret;
}template
<
typename t >
bool heaparray
::set
(int index, t value)
return ret;
}template
<
typename t >
t& heaparray
::operator
(int index)
template
<
typename t >
t heaparray
::operator
(int index)
const
template
<
typename t >
heaparray
& heaparray
::self()
template
<
typename t >
heaparray::~
heaparray()
#endif
main.cpp
#include
#include
#include
"array.h"
#include
"heaparray.h"
using
namespace std;
intmain()
for(
int i=
0; i
length()
; i++)}
delete pai;
return0;
}
在linux系統上對上述程式進行編譯並執行得出結果如下圖:
很明顯,我們的陣列類模板實現的很成功。
C 深度剖析教程38 類模板深度剖析
類模板可以定義任意多個不同的型別引數 類模板可以被特化 類模板的特化型別 看 include include using namespace std template typename t1,typename t2 class test template typename t1,typename t...
C 深度解析 48 類模板深度剖析
1.多引數類模板 2.程式設計實驗 include using namespace std 定義類模板 template 兩個不同引數。class test 下面類模板的特化,即引數型別為指標時的特殊情況 如何處理,下面是這種情況的類實現。因引數仍是泛型,故稱為部分特化 template class...
C 深度剖析教程6 C 之友元
這幾天在複習數學考試,都沒有學c 今天抽空來學一點。什麼是友元?在具體講解友元的性質之前,我們先來看看乙個程式,這個程式是計算兩點之間的距離 include include class point double getx double gety double func point p1,point ...