看板 C_and_CPP 關於我們 聯絡資訊
以下是我有問題的程式碼 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
james732:是的,四個function型態都跟VR_SEG_FUNC相同 07/07 18:25
mingcloud:那請想問一下 參數的部分是怎樣? 07/07 18:28
mingcloud:因為這份CODE他那四個FUNCTION每個後面都有一堆參數 07/07 18:28
mingcloud:這樣感覺跟VR_SEG_FUNC這個型態不同 07/07 18:29
james732:舉個例子吧? 07/07 18:29
mingcloud:譬如說 SEG *seg_clone(Seg*); clone是這樣宣告的 07/07 18:35
mingcloud:上面有看到Clone有吃一個(Seg*)的參數 07/07 18:36
mingcloud:但是 VR_SEG_FUNC這東西在宣告時是沒有參數的? 07/07 18:37
mingcloud:不好意思 我PO文時應該順便PO一下例子的 抱歉 07/07 18:37
loveme00835:強烈懷疑這可能是 function overloading + 包裝 的產 07/07 19:32
loveme00835:物, seg_clone 是否有兩個版本 ? 像下面的程式碼 : 07/07 19:33
loveme00835:http://paste.plurk.com/show/277725/ 07/07 19:33
mingcloud:沒 只有我上面說的那種CLONE而已 o. 07/07 19:39
AstralBrain:在C裡面 Seg *(*VR_SEG_FUNC)() 表示他回傳Seg* 07/07 21:37
AstralBrain:而且不指定傳入參數的type及數量 07/07 21:37
LPH66:樓上正解 參數列寫 () 和 (void) 意義是不同的 07/07 22:02
LPH66:xxx(void) 才是不收參數的意思 07/07 22:02
loveme00835:不過 C++ 就沒辦法這樣寫了 07/07 22:08
loveme00835:唯一想到的方式是用functor 07/07 22:12
mingcloud:恩恩 知道了 感謝各位 07/08 11:45
tomap41017:這是C的部分嘛@@"有點有看沒有懂 07/08 12:17