非型別模板引數知識點梳理

2021-06-08 13:13:47 字數 1038 閱讀 1902

對於函式模板和類模板,模板引數並不侷限於型別,普通值也可以作為模板引數。

1. 非型別的類模板

template class stack ;

template stack::stack()

: numelems(0)

2. 非型別的函式模板引數

template t addvalue(t const& v)

std::transform(v.begin(), v.end(), v.begin(), addvalue);

};

3. 非型別的模板引數的限制

非型別的模板引數是有限制的。通常而言,它們可以是常整數(包括列舉型別)或者指向外部鏈結物件的指標。

浮點數和類物件是不允許作為非型別模板引數的。

例如下面2個模板類是編譯不過的:

template double process(double v)

template class myclass ;

template class myclass ;

myclass<"hello"> x; // error

另外,也不能使用全域性指標作為模板引數:

template class myclass ;

const char* s = "hello";

myclassx; // error

然而,可以這樣使用:

template class myclass ;

extern const char s = "hello";

myclassx; // ok

全域性字元陣列s由"hello"初始化,是乙個外部鏈結物件。

非型別模板引數

這是 c templates 第四章的學習筆記。這一章和下一章可以看作是對前面介紹的函式模板和類模板的補充。這章的主要內容包括 非型別的類模板引數。非型別的函式模板引數。非型別模板引數的限制。在具體介紹以前有比較說明一下什麼是非型別的模板引數。在前面簡單介紹函式模板和類模板的時候,我們都再三說明,模...

C 非型別模板引數

對於函式模板與類模板,模板引數並不侷限於型別,普通值也可以作為模板引數。在基於型別引數的模板中,你定義了一些具體的細節來加以確定 直到 被呼叫時這些細節才被真正的確定。但是在這裡,我們面對的是這些細節是值,而不是型別,當要使用基於值的模板時,必須顯式地指定這些值,才能夠對模板進行例項化。在上篇文章 ...

C 非型別模板引數

對 於函式模板與類模板,模板引數並不侷限於型別,普通值也可以作為模板引數。在基於型別引數的模板中,你定義了一些具體的細節來加以確定 直到 被調 用時這些細節才被真正的確定。但是在這裡,我們面對的是這些細節是值,而不是型別,當要使用基於值的模板時,必須顯式地指定這些值,才能夠對模板進行例項 化。在上篇...