1.雙重模版引數,即模版的引數也是模版,不過只能用於類模版,函式模版中不能這麼使用
例如 template >class cont=std::deque>
stack8{}...
這裡注意首先 class cont不能寫typename cont ,這個比較好理解,這是個類模版。
其次給cont設定預設值=std::deque,由於deque的模板引數是2個,儘管第二個有預設值,但是在這裡會忽略,進行嚴格匹配,所以如果預設值給的deque
則template class cont必須有兩個模版引數
2.類模板的成員函式也可以是函式模版
template>class cont2>
stack8&operator=(stack8const&);
不過這裡的cont2不能有預設值,函式模板的預設值好像是到c++11才支援的。
後面寫的時候也發現了點問題,原來在類外進行函式定義時,不能把模板的預設引數帶上....
比如下面的std::deque必須去掉...
template>class cont=std::deque>
void stack::pop()
不過有點奇怪的是,一般類外定義成員函式,如果函式宣告時有預設引數,類外定義的函式是不能新增預設引數的。
但是放到模板裡就又沒問題了。比如pop(int m=4)編譯也可以過啊?
3. 乙個簡單的templatet const& max(t const&a, t const &b)
如果呼叫
max("123","abc"); ok
max("123","abcd"); complier error
為什麼?
對於第二種 錯誤提示是 t的型別是const char [4] 還是const char [5]?
這裡又解釋了一點,如果引數推導時,形參是引用,陣列作為引數傳入時,不會退化為指標,所以這裡識別的是const char這種陣列型別!!!
改成 t max(t a, t b)就可以了
1 #include2 #include3 #include4 #include5
6using
namespace
std;
78 template>class cont=std::deque>
9class
stack
1021
22 template>class cont2>
23 stack&operator=(stackconst&);
2425
};26 templateclass cont>
27void stack::push(t1 const&t)
2831
32 template>class cont>
33void stack::pop(int m=4)34
37 template>class cont>
38 t1 stack::top()
3942
43 template>class cont>
44bool stack::empty()const
4548 template>class cont>
49 template>class cont2>
50 stack& stack::operator =(const stack&stack2)
5156
else
5764
return *this;65
}66};67
6869
class
string
7076
void set_m_str(char* buf=null);
77private:78
string
m_str;
79};
8081
void string::set_m_str(char*buf)
8285
void func(string&str)
8689
90 template 91
inline t max (t a, t b)
9295
intmain()
96
C template學習總結6
對於基本型別來說,並沒有乙個default模式來講他們初始化為有意義的值,沒有初始化的變數,其指都是未定義的,但是在模板這一塊呢?我們可以採用下面的形式 template void foo 對於class template我們可以採用下面例子的方式 template class myclass 通過...
c template學習總結3
和往常一樣,先來看一段 include template class stack bool full const constructor template stack stack numelems 0 start with no elements template void stack push t...
學習總結 5
操作符問題 一.算術操作符 1.除了 操作符之外,其他的幾個操作符可以作用於整數和浮點數。2.操作符的兩個運算元必須是整數。返回的是整數之後的餘數。二.移位操作符 1.左移 移位規則 左邊拋棄,右邊補零。2.右移 分兩種 1 邏輯移位 左邊用補充,右邊丟棄。2 算術移位 左邊用原該值的符號位補充,右...