Re: [問題] 無法推導出的 function template ?

看板C_and_CPP (C/C++)作者時間13年前 (2013/03/20 21:31), 編輯推噓0(0021)
留言21則, 5人參與, 最新討論串2/2 (看更多)
不好意思好像推文很難說清楚 template<int N> int test(int x1, ...) { return N; } 如果我指定了 N 變成 template<> int test<3>(int x1, ...) { return 0; } 是可以的 可是 template<> int test<3>(int x1, int x2, int x3, ...) { return 0; } // 這是我想要的次佳方案 或者 template<> int test<3>(int x1, int x2, int x3) { return 0; } // 這是我想要的最佳方案 都是不行。 感覺好像只能透過重載 test() 但是這樣使用者有無指定會變成呼叫不同函數 請問是否有方法解決呢? 再次感謝~ ※ 引述《applecool (noOneKnows)》之銘言: : 開發平台(Platform): (Ex: VC++, GCC, Linux, ...) : VC++ 6.0 : 問題(Question): : 請問如果是 : template<size_t N> : int test(int x1, ...) { : 想告訴有 N 個 input, x1, ..., xN : } : 這樣是 OK 的 : 但如果某特定個數 input (例如 N = 3) 的 Specialization : 請問要怎麼寫才好呢 (雖然想到一大堆替代方案...) : 希望大家不吝指教 : 感恩 ※ 編輯: applecool 來自: 123.110.247.44 (03/20 21:45)

03/20 21:42, , 1F
int test(int x1, int x2, int x3); 就好了
03/20 21:42, 1F

03/20 21:43, , 2F
為何要用 template?
03/20 21:43, 2F
因為這樣會變成重載 如果使用者不指定的話不會自動推導參數,而會直接使用 non-template test() int test( int x1, int x2, int x3) { return 0; } 比如說 test<3>(1, 2, 3) 回傳 3 test(1, 2, 3) 就會回傳 0 了 其實我有想到很多的替代方案 我只是很好奇 VC++ 6.0 能不能達到這樣的功能 謝謝喔~ ※ 編輯: applecool 來自: 123.110.247.44 (03/20 21:51)

03/20 21:51, , 3F
那用 template 對你來說有什麼好處?
03/20 21:51, 3F
以我實際應用的例子有很大好處,但是我簡化成這問題 以這個簡化過的範例來說確實沒有任何好處 ^______^ ※ 編輯: applecool 來自: 123.110.247.44 (03/20 21:54)

03/20 22:29, , 4F
解法不少。如果知道更詳細的考量的話問題會好回答許多。
03/20 22:29, 4F
感謝 我也想到很多沒有損失的替代方案 只是想知道是否有可能達到這樣的目的 (vc6) ※ 編輯: applecool 來自: 123.110.247.44 (03/20 22:38)

03/20 22:42, , 5F
直接寫例外處理呢?
03/20 22:42, 5F

03/20 22:43, , 6F
???
03/20 22:43, 6F

03/21 00:01, , 7F
原po想要的應該是編譯時期的檢查吧
03/21 00:01, 7F

03/21 00:25, , 8F
template default arugement
03/21 00:25, 8F

03/21 00:32, , 9F
xD 傳幾個引數在呼叫的時候就知道了, 用一個 ... 還要
03/21 00:32, 9F

03/21 00:33, , 10F
另外給它個數...
03/21 00:33, 10F

03/21 00:52, , 11F
你一直給呼叫的時候給三個引數的例子, 那麼
03/21 00:52, 11F

03/21 00:53, , 12F
test<3>( int x1, int x2, int x3, int x4 )
03/21 00:53, 12F

03/21 00:53, , 13F
test<3>( int x1, int x2 ) 之類的 code 怎麼辦呢?
03/21 00:53, 13F

03/21 00:54, , 14F
你的切入點一直都是從 variadic function 來做, 但是
03/21 00:54, 14F

03/21 00:55, , 15F
有說到非用這個的理由
03/21 00:55, 15F

03/21 00:55, , 16F
^都沒
03/21 00:55, 16F

03/21 01:32, , 17F
手邊沒有VC6... http://ideone.com/Qpj9EM
03/21 01:32, 17F

03/21 02:21, , 18F
也可以用 overload 達到類似的效果, 如果 test 本身
03/21 02:21, 18F

03/21 02:22, , 19F
是 functor 的話...
03/21 02:22, 19F

03/21 03:19, , 20F
03/21 03:19, 20F

03/22 00:00, , 21F
謝謝謝謝~~~學到很多^^
03/22 00:00, 21F
文章代碼(AID): #1HIReTOH (C_and_CPP)
文章代碼(AID): #1HIReTOH (C_and_CPP)