[問題] template / array decay into pointer

看板C_and_CPP (C/C++)作者 (...)時間14年前 (2011/08/07 07:47), 編輯推噓6(6018)
留言24則, 7人參與, 最新討論串1/1
http://pastie.org/2332076 各位好, 我寫了一個演算法,傳入兩個陣列,然後計算兩個陣列的總距離。 陣列有可能是一般數值的陣列, 也有可能是很多個向量所組成的陣列。 (程式碼中是 double[10][5], 五維向量, 一共十個。) 所以我寫了 template, 不過 main 裡面的最後一行總是編譯不過, 請問要怎麼改才好? - 另外...在 C 語言中,沒有 template 的情況下, 能夠達到相同的效果嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.115.153.51 ※ 編輯: DJWS 來自: 59.115.153.51 (08/07 07:58) ※ 編輯: DJWS 來自: 59.115.153.51 (08/07 08:02)

08/07 08:24, , 1F
看起來是因為 T 前面要是 double[5] 後面要是 double*
08/07 08:24, 1F

08/07 08:26, , 2F
(C++98 14.8.2.4/2) 我想根本原因是 distance2 的參數會被
08/07 08:26, 2F

08/07 08:29, , 3F
調整成 double*. 不把陣列(直接)當介面一部分就沒事。
08/07 08:29, 3F

08/07 08:31, , 4F
C 的話也許可模仿 qsort 硬幹 :)
08/07 08:31, 4F

08/07 08:34, , 5F
(關於調整可看 C++03 8.3.5/3) (之前應該打 C++03)
08/07 08:34, 5F

08/07 10:51, , 6F

08/07 10:54, , 7F
排版亂掉...= ="
08/07 10:54, 7F

08/07 11:26, , 8F
這是語法上的缺陷,C++的array不是first-class object
08/07 11:26, 8F

08/07 11:27, , 9F
所以把它當成value傳遞會出現許多問題
08/07 11:27, 9F

08/07 12:57, , 10F
C的話就這樣吧XD http://codepad.org/RwEP2xLT
08/07 12:57, 10F

08/07 13:06, , 11F
啊,有些地方打錯了orz
08/07 13:06, 11F

08/07 15:36, , 12F
二維陣列與雙重指標不一樣阿...
08/07 15:36, 12F

08/07 16:21, , 13F

08/07 18:48, , 14F
謝謝各位! 參考各位意見後寫成這樣http://pastie.org/2333953
08/07 18:48, 14F

08/07 18:52, , 15F
另外我也試了 void* ,亦可行,只不過程式碼就會多了一點!
08/07 18:52, 15F

08/07 18:57, , 16F
@firejox: void 指標位移是編譯器自己的延伸功能 :P
08/07 18:57, 16F

08/07 18:59, , 17F
例如gcc: gcc.gnu.org/onlinedocs/gcc/Pointer-Arith.html
08/07 18:59, 17F

08/07 21:24, , 18F
唉唉...還是C++好寫 http://boost.codepad.org/0Rk21rJd
08/07 21:24, 18F

08/07 21:41, , 19F
@Favonia:I know.For safe,it should use unsinged char
08/07 21:41, 19F

08/07 21:41, , 20F
pointer cast...
08/07 21:41, 20F

08/07 21:44, , 21F
不過假如是gcc的話 那還可以用typeof XDD
08/07 21:44, 21F

08/07 23:02, , 22F
偷偷借問
08/07 23:02, 22F

08/07 23:08, , 24F
我在多看幾次好了 抱歉><
08/07 23:08, 24F
文章代碼(AID): #1EFTARjZ (C_and_CPP)
文章代碼(AID): #1EFTARjZ (C_and_CPP)