和往常一樣,先來看一段**:
#include template class stackbool full() const
}; // constructor
template stack::stack ()
: numelems(0) // start with no elements
template void stack::push (t const& elem)
++numelems; // increment number of elements
} templatevoid stack::pop ()
--numelems; // decrement number of elements
} template t stack::top () const
return elems[numelems-1]; // return last element
}
接下來編寫我們的測試函式:
#include #include #include #include "stack4.hpp"int main()
catch (std::exception const& ex)
}
大家要注意int20stack和int40stack是兩個不同的型別,他們是不能進行硬是或者顯示的轉換的。也不能夠相互賦值。
你還可以為函式模板定義非型別引數:
template t addvalue (t const& x)
當我們想把【函式】和某種操作作為引數傳遞的時候,就非常有用,比如在使用stl時,你可能有下面的**:
std::transform (source.begin(), source.end(), // start and end of sourcedest.begin(), // start of destination
addvalue); // operation
有時候我們為了使得編譯器推導的時候簡單一些,可以使用:
std::transform (source.begin(), source.end(), // start and end of sourcedest.begin(), // start of destination
(int(*)(int const&)) addvalue); // operation
但是我們要注意,非型別模板引數也有自己的侷限,通常來說他們只能是常整數,包括列舉,或者指向外部鏈結的指標。如果我們用浮點數或者class-type objects作為非型別模板引數是錯誤的:
template // error: floating-point values are notdouble process (double v) // allowed as template parameters
template // error: class-type objects are not
class myclass ;
由於字串字面常熟是一種採用內部鏈結的物件,也就是說不通模組中的兩個同值的字串字面常數其實是兩個不同的東西,所以他們也不能用來作為模板引數:
template class myclass ;myclass<"hello"> x; // error: string literal "hello" not allowed
此外全域性指標也是不行的:
template class myclass ;char const* s = "hello";
myclassx; // error: s is pointer to object with internal linkage
但是下面的例子是可以的:
template class myclass ;extern char const s = "hello";
myclassx; // ok
在這個例子中,s是乙個外部連線的部件。
C template學習總結6
對於基本型別來說,並沒有乙個default模式來講他們初始化為有意義的值,沒有初始化的變數,其指都是未定義的,但是在模板這一塊呢?我們可以採用下面的形式 template void foo 對於class template我們可以採用下面例子的方式 template class myclass 通過...
c template 5 x 學習總結
1.雙重模版引數,即模版的引數也是模版,不過只能用於類模版,函式模版中不能這麼使用 例如 template class cont std deque stack8 這裡注意首先 class cont不能寫typename cont 這個比較好理解,這是個類模版。其次給cont設定預設值 std de...
C template 學習歸納2
關於c 中的類模板,常見的形式為 templateclass classname 比如筆者在這裡舉乙個例子 include include include templateclass stack templatevoid stack push t const a templatevoid stack...