C 深度剖析教程39 實現C 陣列類模板

2021-09-02 22:24:04 字數 2179 閱讀 2364

模板引數可以是數值型引數。也就是非型別引數。如下圖所示:

我們可以像上面定義乙個區域性陣列,但是卻不能這樣定義:

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 ...