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