看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《leondemon (狗狗)》之銘言: : 想問幾個關於 C 語言的問題 : 問題一:如果一個 function 的回傳值的型別不確定 有辦法宣告嗎? 我實作了一下 把問題列在下面的程式碼中... // 這是我想在兩個 function 之間安插的 function // 他會接受一個 unknown type 的值 並回傳一個 unknown type 的值 // 這個函式是有可能會依據傳入的值來修改回傳值 void* sideEffect(void *input){ printf("sideEffect\n"); // Question 1: 有辦法知道傳進來的 *input 原本是什麼型別嗎? // 例如:若 input 為數字,則將其值乘以2 return input; } // 這是實際上會計算 score 的 function 目前先以回傳 99 示意 int score99(){ return 99; } // 這是外面呼叫的 function int score(){ // 原本的實作是單純回傳 score99() 的值 // return score99(); // 現在是在回傳 score99() 之前,呼叫 sideEffect() // sideEfffect 是有機會去改變傳入、傳出的值 // Question: 能否把下面兩行程式碼濃縮成一行? // Question: 有辦法在return時不cast成 *(int *) 中的"int"嗎? // 也就是希望能universal,若sideEffect傳入是float型別 // 回傳時就自動會cast成*(float*) // sideEffect 傳入傳出都不檢查(或指定)型別 int someValue = score99(); return *(int *) sideEffect(&someValue); } int main (int argc, char * argv[] ) { printf("score: %d\n", score()); return 0; }; (console) ==> sideEffect ==> score: 99 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 60.245.65.129 ※ 編輯: leondemon 來自: 60.245.65.129 (09/20 14:22)
Feis:核心問題是你知道型別後要做哪些操作 ,因為沒多載跟模板可用 09/20 14:26
leondemon:對 C++ 不熟,請問一下若是用 C++ 要怎麼實作呢? 09/20 14:28
Feis:還有很多設計議題, 只是個參考: http://codepad.org/PDTbyeCK 09/20 14:45
EdisonX:原po原意是用C,若用純C的話我想要用enum.struct.union了. 09/20 19:16
EdisonX:不過並不會比較方便。 09/20 19:17
Feis:純 C 的話, 呼叫函式者有比較多的責任, 是我的話會這麼寫: 09/20 20:55
Feis:http://ideone.com/qMewkT 09/20 20:55
leondemon:如果要靠 C++ 才能解決 那我會願意試試看 因為有Obj-C++ 09/21 17:54
leondemon:現在是想知道 C block/callback 能否使用 template 09/21 18:45
EdisonX:學 C++ 吧, C 就算可達成這目的,大概也被納為奇淫怪技了. 09/21 23:37