[問題] typedef的問題(可能還有函數指標)

看板C_and_CPP作者 (逆宇)時間15年前 (2010/07/07 18:23), 編輯推噓3(3018)
留言21則, 6人參與, 最新討論串1/1
以下是我有問題的程式碼 typedef Seg *(*VR_SEG_FUNC)(); static const VR_SEG_FUNC seg_vtable[] = { seg_new, seg_delete, seg_clone, seg_init }; 首先第一行沒甚麼問題 應該就是 宣告一個 VR_SEG_FUNC的FUNCTION TYPE 他不吃進任何 parameter 並且回傳的形式為 Seg* 接下來的就看不太懂了 猜想可能是 宣告一個函數指標陣列 裡面有這四種FUNCTION 分別是 new , delete, clone , init 如果我猜測得沒錯的話 那請繼續請教一下 這四個function的型態為何? 也是要回傳 SEG* 並且不吃入任何參數嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 211.23.188.78

07/07 18:25, , 1F
是的,四個function型態都跟VR_SEG_FUNC相同
07/07 18:25, 1F

07/07 18:28, , 2F
那請想問一下 參數的部分是怎樣?
07/07 18:28, 2F

07/07 18:28, , 3F
因為這份CODE他那四個FUNCTION每個後面都有一堆參數
07/07 18:28, 3F

07/07 18:29, , 4F
這樣感覺跟VR_SEG_FUNC這個型態不同
07/07 18:29, 4F

07/07 18:29, , 5F
舉個例子吧?
07/07 18:29, 5F

07/07 18:35, , 6F
譬如說 SEG *seg_clone(Seg*); clone是這樣宣告的
07/07 18:35, 6F

07/07 18:36, , 7F
上面有看到Clone有吃一個(Seg*)的參數
07/07 18:36, 7F

07/07 18:37, , 8F
但是 VR_SEG_FUNC這東西在宣告時是沒有參數的?
07/07 18:37, 8F

07/07 18:37, , 9F
不好意思 我PO文時應該順便PO一下例子的 抱歉
07/07 18:37, 9F

07/07 19:32, , 10F
強烈懷疑這可能是 function overloading + 包裝 的產
07/07 19:32, 10F

07/07 19:33, , 11F
物, seg_clone 是否有兩個版本 ? 像下面的程式碼 :
07/07 19:33, 11F

07/07 19:33, , 12F

07/07 19:39, , 13F
沒 只有我上面說的那種CLONE而已 o.
07/07 19:39, 13F

07/07 21:37, , 14F
在C裡面 Seg *(*VR_SEG_FUNC)() 表示他回傳Seg*
07/07 21:37, 14F

07/07 21:37, , 15F
而且不指定傳入參數的type及數量
07/07 21:37, 15F

07/07 22:02, , 16F
樓上正解 參數列寫 () 和 (void) 意義是不同的
07/07 22:02, 16F

07/07 22:02, , 17F
xxx(void) 才是不收參數的意思
07/07 22:02, 17F

07/07 22:08, , 18F
不過 C++ 就沒辦法這樣寫了
07/07 22:08, 18F

07/07 22:12, , 19F
唯一想到的方式是用functor
07/07 22:12, 19F

07/08 11:45, , 20F
恩恩 知道了 感謝各位
07/08 11:45, 20F

07/08 12:17, , 21F
這是C的部分嘛@@"有點有看沒有懂
07/08 12:17, 21F
文章代碼(AID): #1CD5MlcC (C_and_CPP)