[問題] 指標函數在C與C++

看板C_and_CPP作者 (tonytung21)時間15年前 (2010/09/23 12:03), 編輯推噓11(11029)
留言40則, 9人參與, 最新討論串1/1
下面的程式是我在C環境中寫的 如果想利用相同的技巧在C++中實現 要如何做呢? #include <stdio.h> #include <stdlib.h> void S_searching(int,int); void S_case1(int,int); void (*SERippleState)=(void *)(S_searching); void S_searching(int n,int m){ printf("in search, %d\n", n+m); SERippleState = (void *)S_case1; } void S_case1(int n,int m){ printf("in case1, %d\n", n+m); SERippleState = (void *)S_searching; } int main(){ int a=4,b=5; (*SERippleState)(a,b); (*SERippleState)(a,b); (*SERippleState)(a,b); return 0; } 執行結果: in search, 9 in case1, 9 in search, 9 謝謝大家幫忙 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.118.122.108

09/23 12:10, , 1F
你原本是用什麼編譯器?
09/23 12:10, 1F

09/23 12:13, , 2F
09/23 12:13, 2F

09/23 13:03, , 3F
問題已解決,感激不盡!
09/23 13:03, 3F

09/23 14:16, , 4F
我剛就在猜,原PO回來後除了講問題解決以外,會不會理一樓
09/23 14:16, 4F

09/23 14:20, , 5F
沒辦法,我也沒有期待太多 XD
09/23 14:20, 5F

09/23 15:23, , 6F
那我只好推一樓不理原po了 XDDD
09/23 15:23, 6F

09/23 16:16, , 7F
原 po 本來寫的 code 也不是函數指標啊..問題就在這
09/23 16:16, 7F

09/23 16:49, , 8F
其實我不是不理一樓,我剛才有事情..原本問完問題之後
09/23 16:49, 8F

09/23 16:51, , 9F
我就出去了~"~..回來看一下又要走.所以才回問題解決
09/23 16:51, 9F

09/23 16:52, , 10F
而已。
09/23 16:52, 10F

09/23 21:05, , 11F
所以還是沒有理一樓?
09/23 21:05, 11F

09/24 14:42, , 12F
我論今天以前會理一樓~
09/24 14:42, 12F

09/24 14:57, , 13F
我用的是g++編譯器,一樓我有水球給他了^^
09/24 14:57, 13F

09/24 14:58, , 14F
我和原PO co-work 這個程式,所以代他回答 眾樓友的問題
09/24 14:58, 14F

09/24 14:58, , 15F
是想利用函數指標在某個大程式中加入某項功能, using g++
09/24 14:58, 15F

09/24 14:59, , 16F
最終是希望在class中 的成員函數之間 使用函數指標來切換
09/24 14:59, 16F

09/24 15:00, , 17F
一樓的確幫我們點出了錯,但在類別中的使用方式似乎行不通
09/24 15:00, 17F

09/24 15:41, , 18F
09/24 15:41, 18F
※ 編輯: tonytung21 來自: 140.118.122.108 (09/24 15:48)

09/24 15:50, , 19F
主要的錯誤訊息為 http://nopaste.csie.org/15bc1
09/24 15:50, 19F

09/24 16:00, , 20F
請看這個網頁:http://ppt.cc/z_UW
09/24 16:00, 20F

09/24 16:30, , 21F
我發現我改不出來 XD 要請高手出動了
09/24 16:30, 21F

09/24 16:54, , 22F
你是想要在一般函式跟成員函式之間做切換嗎?
09/24 16:54, 22F

09/24 16:55, , 23F
拍謝看到了 = ="
09/24 16:55, 23F

09/24 16:57, , 24F
#1A5Oiz-O 前面加 &
09/24 16:57, 24F

09/24 17:04, , 25F
http://codepad.org/Fu5CItq2 貼程式碼用codepade比
09/24 17:04, 25F

09/24 17:04, , 26F
較好...你那個還要從下面複製> <
09/24 17:04, 26F

09/24 17:11, , 27F
原來caller要這麼寫 受教了 XD
09/24 17:11, 27F

09/24 17:31, , 28F
成員函數指標使用時,要搭配兩樣:a.該方法所屬物件,此例
09/24 17:31, 28F

09/24 17:32, , 29F
就是A1; b.在C++新增的運算子 .* (或->*)
09/24 17:32, 29F

09/24 17:33, , 30F
所以caller一開始就是先寫 A1.* 然後才去考慮如何叫出指標
09/24 17:33, 30F

09/24 17:36, , 31F
我是比較喜歡用 functor 啦...http://ppt.cc/5Iit
09/24 17:36, 31F

09/24 17:37, , 32F
起來比較爽
09/24 17:37, 32F

09/24 17:58, , 33F
delegate 好像也不錯? 沒用過幾次,但不會這麼多運算子
09/24 17:58, 33F

09/24 18:13, , 34F
感謝樓上兩位,清楚明瞭,謝謝分享
09/24 18:13, 34F

09/24 18:50, , 35F
話說我好像犯了第八誡 @_@
09/24 18:50, 35F

09/25 19:31, , 36F
用 function<> + bind() 就搞定了,一般 fp 也能吃。
09/25 19:31, 36F

09/25 19:31, , 37F
Effective C++ 3/e 說的。
09/25 19:31, 37F

09/25 20:08, , 38F
t 大說的是哪一個 Item 呢? 沒什麼印象 > <
09/25 20:08, 38F

09/25 20:30, , 39F
發現我看的是第二版= =難怪一點都沒有boost的成分
09/25 20:30, 39F

09/25 20:49, , 40F
是 tr1! 不熟... Orz
09/25 20:49, 40F
文章代碼(AID): #1Ccj5x0o (C_and_CPP)