Re: [問題] template

看板C_and_CPP作者 (眠月)時間16年前 (2009/03/08 14:58), 編輯推噓7(7012)
留言19則, 6人參與, 最新討論串2/6 (看更多)
用 void* 來實作泛型…… class stack { void** _data ; void push(void* v) ; void* pop() ; } ; int main () { // int stack iStack ; iStack.push ( (void*) new int ) ; // push int* n = (int*) iStack.pop() ; // pop // double stack dStack ; dStack.push ( (void*) new double ) ; // push double* n = (double*) dStack.pop() ; // pop } ; 用起來很麻煩的,而且效能低落,也不安全。(敝公司用的就是這種 orz) 另外一個作法是用 macro 把整個 class 宣告包起來…… #define STACK(T) class stack_##T { \ T *_data ; \ void push( T v ) ; \ T pop() ; \ } STACK(int) ; // 等於宣告整個 stack_int STACK(double) ; // 宣告整個 stack_double int main () { stack_int iStack ; stack_double dStack ; } 你比較喜歡哪一種 @@? -- To iterate is human, to recurse is divine. 遞迴只應天上有, 凡人該當用迴圈.   L. Peter Deutsch -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.160.105.151

03/08 23:20, , 1F
看起來第二種比較好 那第二種有沒有什麼缺點呢?
03/08 23:20, 1F

03/08 23:24, , 2F
相較template起來第二種每多用一種型別就要先STACK(XXX)
03/08 23:24, 2F

03/08 23:31, , 3F
第二種喔.. 能塞的型別有限囉.. 比方說你寫 STACK(int*)
03/08 23:31, 3F

03/08 23:32, , 4F
就爆炸啦…因為展開會是 class stack_int* { } ;
03/08 23:32, 4F

03/08 23:35, , 5F
原來如此 感謝感謝
03/08 23:35, 5F

03/08 23:36, , 6F
可以用 typedef 來解決 int* 的問題
03/08 23:36, 6F

03/08 23:36, , 7F
但是這個可以克服啦.. 型別跟修飾名分開給就好
03/08 23:36, 7F

03/08 23:37, , 8F
#define(T,N) class stack_##N { T* _data ; }
03/08 23:37, 8F

03/08 23:37, , 9F
STACK(int*, intp) ; int main(){ stack_intp ipStack; }
03/08 23:37, 9F

03/08 23:38, , 10F
哇~小善出手了~ XD
03/08 23:38, 10F

03/08 23:39, , 11F
跟1比起來我比較喜歡2, 可以選template的話當然是首選
03/08 23:39, 11F

03/08 23:40, , 12F
喔喔 有道理 typedef也是類似用法嗎?
03/08 23:40, 12F

03/08 23:43, , 13F
typedef int* intp; STACK(intp) ;
03/08 23:43, 13F

03/08 23:44, , 14F
驚!你該不會認識我同學?
03/08 23:44, 14F

03/08 23:45, , 15F
當然不認識,你的id不就是小善嗎 XD
03/08 23:45, 15F

03/08 23:47, , 16F
也可以是山或閃啊
03/08 23:47, 16F

03/08 23:49, , 17F
單純猜中,這就是大宇宙的意志
03/08 23:49, 17F

03/09 10:40, , 18F
小善我也認識,不過我認識的是法律系的
03/09 10:40, 18F

03/09 10:55, , 19F
其實第二種概念上也比較接近 template
03/09 10:55, 19F
文章代碼(AID): #19izq5ej (C_and_CPP)
討論串 (同標題文章)
完整討論串 (本文為第 2 之 6 篇):
問題
5
14
13年前, 2011/12/19 02:34
問題
0
2
問題
1
2
問題
4
9
16年前, 2009/05/06 14:19
問題
7
19
問題
2
3
16年前, 2009/03/08 14:28
文章代碼(AID): #19izq5ej (C_and_CPP)