Re: [問題] template stack
看板C_and_CPP (C/C++)作者littleshan (我要加入劍道社!)時間16年前 (2010/03/18 15:56)推噓2(2推 0噓 3→)留言5則, 3人參與討論串2/4 (看更多)
※ 引述《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
→
03/18 15:58, , 1F
03/18 15:58, 1F
推
03/18 16:28, , 2F
03/18 16:28, 2F
推
03/18 16:30, , 3F
03/18 16:30, 3F
→
03/18 16:30, , 4F
03/18 16:30, 4F
→
03/18 17:39, , 5F
03/18 17:39, 5F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 4 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章