Re: [問題] 陣列的內容是函數指標

看板C_and_CPP作者 (鬼翼&娃娃魚)時間14年前 (2009/10/12 14:13), 編輯推噓6(606)
留言12則, 6人參與, 最新討論串3/5 (看更多)
※ 引述《tyc5116 (累人啊....)》之銘言: : 恩....V大提供的方法我看的不是很懂....XDDD : 有點複雜,一時間還看不太出來... : 我目前做的東西是類似控制機台的人機介面,根據輸入的指令不同 : 他要驅動的機台動作或機台種類也不同 : 可能版上相同背景的人不多,我換個方式來說 : 一般我們在寫程式前須要有流程圖,再根據流程圖寫出所有的程式 : 而目前想做到的是,讓使用者在PC上畫出流程圖,便能產生相對應的程式碼 : 大概有這樣的意思,而目前的對象是機器,所以會有我原來問的那種問題.. : 大概就是這樣吧.... 使用func ptr array會遇到一個問題, 你的參數型態要一樣才能宣告array... (如果小弟這個觀念錯了, 就不用理會後面的文章了....^^||) 那麼要讓它宣告時是一樣型態, 可是內容又照你實作的做, 就是強轉型.... Ex1: funcp[0]內部其實是處理兩個int.... main() { int x, y; // 給適當值. (*func[0])((void*)&x, (void*)&y); } func[0]指到的func實體.... funcInt(void* para1, void* para2) { int x = *(int*)para1, y = *(int*)para2; 內容.... } Ex2: funcp[1]內部其實是處理兩個double.... main() { double x, y; (*func[1])((void*)&x, (void*)&y); } func[1]指到的func實體.... funcDouble(void* para1, void *para2) { double x = *(double*)para1, y = *(double*)para2; 內容.... } Ex3: funcp[2]要混搭風.... main() { char x; float y[10]; (*func[2])((void*)&x, (void*)y); } func[2].... funcMix(void* para1, void *para2) { char x = *(char*) para1; float y = (float*) para2; } 所以你會發現, 其實不同index裡如果不同型態, code會滿噁心的.... caller與callee之間的sync完全是programmer(也就是你)要顧好的.... 如果連回傳型態都不同, 就要傳入第三個參數來寫回傳值了.... 如果連參數的數量都不同........我覺得你要換一個策略寫code....XD 如果不同func其實只有傳入型態不同, 用func overloading就夠了.... 你可以寫一堆func名字都一樣, Ex: func(int x, int y) func(double x, double y) func(char x, float *y)....etc template的用法有待板上其他強者補完, 小弟C++不熟Orz 以上, 因為是隨手打的沒有測過, 有漏誤的也請板上大大指正<(_ _)> == 所以你要寫flow chart -> code的automatic code generator?? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.134.41.4 ※ 編輯: VictorTom 來自: 220.134.41.4 (10/12 14:15)

10/12 14:40, , 1F
看來可能要換策略了,因為型態和數量都會不同..XD
10/12 14:40, 1F

10/12 14:41, , 2F
類似automatic code generator沒錯
10/12 14:41, 2F

10/12 15:07, , 3F
要array的話,boost的Any Lib覺得如何?
10/12 15:07, 3F

10/12 15:27, , 4F
為什麼要用function pointer這種舊時代的產物呢
10/12 15:27, 4F

10/12 15:28, , 5F
functor這麼方便好用容易理解XD
10/12 15:28, 5F

10/12 15:28, , 6F
除非你只能用C寫 那就沒辦法了..
10/12 15:28, 6F

10/12 15:30, , 7F
因為人家只會用C啊(光速逃XD) 小弟我承認前面幾篇有討論
10/12 15:30, 7F

10/12 15:31, , 8F
functor的都還沒有仔細去看懂/寫程式實際練習用過Orz
10/12 15:31, 8F

10/12 15:35, , 9F
要用 boost 的話,就用 boost::function 的 array 就好啦
10/12 15:35, 9F

10/12 15:45, , 10F
通通 bind 成 function<void(int,int)>
10/12 15:45, 10F

10/12 15:45, , 11F
arrary 就變成 function<void(int,int)> func[3] 之類的
10/12 15:45, 11F

10/12 17:44, , 12F
union 呢?
10/12 17:44, 12F
文章代碼(AID): #1AqiZlKA (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1AqiZlKA (C_and_CPP)