[問題] 有沒有方法讓一個function變成pointer?

看板C_and_CPP (C/C++)作者 (傳來傳去)時間14年前 (2012/03/08 15:02), 編輯推噓2(2015)
留言17則, 7人參與, 最新討論串1/2 (看更多)
假設有一個很長很長的arrary A[N] 有一個function : double Func(double*A,int i) 他會根據A的每一個element i傳出一個double的值 現在有一個母function : void Big(double*) 傳進去一個arrary 每個element都做 我想試圖做這種事: 先宣告一個arrary double B[N]; 然後for(k=0;k<N;k++) B[k]=Func(A,k); Big(B); 想問有沒有方法可以不用宣告一個array B 而直接把Func塞進去Big裡面? 讓他"感覺上" 看起來像是這樣子: Big(Func(A,?)) Func一定要存在 不能把他直接拆開.... 我的意思是, Func看起來像是一個index 是i的一個arrary(但它是function) 能不能 就把他當成一個arrary 塞進另一個function Big中? 感覺上好像只能經由先宣告B的方式再塞進去?不曉得有沒有不宣告B的方式進去...因為 那個N很大 再多宣告一個B 記憶體會不夠 但Func又不能硬拆 因為有太多地方需要用到 Func了...如果把它拆出來 整個版面會超級大超級醜...非常難debug -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.240.156.169

03/08 16:39, , 1F
我想你需要的是改寫法.照原本的設計似乎B要存在
03/08 16:39, 1F

03/08 16:40, , 2F
不就是fuction pointer?
03/08 16:40, 2F

03/08 16:51, , 3F
看不太懂 是要改成像這樣嗎? http://ideone.com/c00jH
03/08 16:51, 3F

03/08 18:30, , 4F
嘛, 這檔子事還沒看過的人自然想不到什麼簡潔的敘述法...XD
03/08 18:30, 4F

03/08 18:31, , 5F
的確只要使用 function pointer (函式指標) 即可達成目的
03/08 18:31, 5F

03/08 21:20, , 6F
請問function pointer是三樓那個嗎?
03/08 21:20, 6F

03/09 17:11, , 7F
不是
03/09 17:11, 7F

03/09 17:15, , 8F
function pointer 的宣告是Big((*fun)(...) , ...)
03/09 17:15, 8F

03/10 10:17, , 9F
昨天看過了 FP似乎要先在母函式先宣告好內指標為FP
03/10 10:17, 9F

03/10 10:18, , 10F
但如果Big(double*)裡面有沒有辦法通用一般指標以及
03/10 10:18, 10F

03/10 10:18, , 11F
FP能夠通用?
03/10 10:18, 11F

03/11 01:59, , 12F
function pointer作法給你參考 http://ideone.com/Gvm5g
03/11 01:59, 12F

03/11 02:01, , 13F
主要的Func不動,Big改成接Func、array A還有 A的size N
03/11 02:01, 13F

03/11 02:03, , 14F
如果你的目的是連Big(double*)都不能改,可以做額外做一個
03/11 02:03, 14F

03/11 02:04, , 15F
接收A的function object,並overload [] operator來達到
03/11 02:04, 15F

03/11 02:11, , 16F
另外一提,AstralBrain提供的方法,本質上也是一樣的做法
03/11 02:11, 16F

03/11 02:12, , 17F
只是把function pointer改成了C++0x的function object
03/11 02:12, 17F
文章代碼(AID): #1FM5cML1 (C_and_CPP)
文章代碼(AID): #1FM5cML1 (C_and_CPP)