作者littleshan (我要加入劍道社!)
看板C_and_CPP
標題Re: [問題] template stack
時間Thu Mar 18 15:56:38 2010
※ 引述《james732 (好人超)》之銘言:
: 遇到的問題: (題意請描述清楚)
: 我想要寫出這樣的東西:
: int main()
: {
: MyStack default; // 容器使用 vector<int>
: MyStack<double> dstack; // 容器使用 vector<double>
: MyStack<string, list> dlstack; // 容器使用 list<string>
: }
: 寫一個自定義的 stack, 裡面用 STL container 來裝資料
: 如果完全不指定 template parameter, 則預設為 vector<int>
: 可以指定一個 template parameter T, 則 container 變為 vector<T>
: 也可以藉由再加上第二個 parameter, 進一步的改變 container
: 不過我不知道要怎麼去宣告這樣的 template class...
這可以用 template template parameter
template <typename T = int,
template<typename> class U = vector>
class MyStack {
...
};
template<typename> class U 的意思是
U 並非一般的 class name 或 native type
而是一個 template,接受一個 typename 作為參數
不過如果你按照上面的寫法,會得到 compile error
因為 vector 這個 template 並不是只有一個 type parameter
雖然我們平常用 vector<int> vector<double> 用得很習慣
但其實它有第二個 type parameter 可以讓你自訂 memory allocator
只是 STL 有一個預設的 allocator 給你用
所以我們會以為 vector 只有一個 type parameter
所以正確的宣告方法如下
template <typename T = int,
template<typename,typename> class U = vector>
class MyStack {
...
};
MyStack<> a; // MyStack<int, vector>
MyStack<double> b; // MyStack<double, vector>
MyStack<double,list> c; // MyStack<double, list>
至於 MyStack<> 能不能省掉 <>
答案是不行
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.29.108
→ james732:太好了,我一直搞不懂 template template 的用法 03/18 15:58
推 VictorTom:推....orz 03/18 16:28
推 Killercat:james我建議你可以參考一下Modern C++ Design 03/18 16:30
→ Killercat:第一章講Policy class的時候會看到很多應用XD 03/18 16:30
→ james732:那本書我有翻過 不過消化不良 orz 03/18 17:39