看板 C_and_CPP 關於我們 聯絡資訊
不好意思好像推文很難說清楚 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)
linotwo:int test(int x1, int x2, int x3); 就好了 03/20 21:42
linotwo:為何要用 template? 03/20 21:43
因為這樣會變成重載 如果使用者不指定的話不會自動推導參數,而會直接使用 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)
linotwo:那用 template 對你來說有什麼好處? 03/20 21:51
以我實際應用的例子有很大好處,但是我簡化成這問題 以這個簡化過的範例來說確實沒有任何好處 ^______^ ※ 編輯: applecool 來自: 123.110.247.44 (03/20 21:54)
linotwo:解法不少。如果知道更詳細的考量的話問題會好回答許多。 03/20 22:29
感謝 我也想到很多沒有損失的替代方案 只是想知道是否有可能達到這樣的目的 (vc6) ※ 編輯: applecool 來自: 123.110.247.44 (03/20 22:38)
leiyan:直接寫例外處理呢? 03/20 22:42
applecool:??? 03/20 22:43
coolcomm:原po想要的應該是編譯時期的檢查吧 03/21 00:01
loveme00835:template default arugement 03/21 00:25
loveme00835:xD 傳幾個引數在呼叫的時候就知道了, 用一個 ... 還要 03/21 00:32
loveme00835:另外給它個數... 03/21 00:33
loveme00835:你一直給呼叫的時候給三個引數的例子, 那麼 03/21 00:52
loveme00835:test<3>( int x1, int x2, int x3, int x4 ) 03/21 00:53
loveme00835:test<3>( int x1, int x2 ) 之類的 code 怎麼辦呢? 03/21 00:53
loveme00835:你的切入點一直都是從 variadic function 來做, 但是 03/21 00:54
loveme00835:有說到非用這個的理由 03/21 00:55
loveme00835:^都沒 03/21 00:55
loveme00835:手邊沒有VC6... http://ideone.com/Qpj9EM 03/21 01:32
loveme00835:也可以用 overload 達到類似的效果, 如果 test 本身 03/21 02:21
loveme00835:是 functor 的話... 03/21 02:22
loveme00835:http://ideone.com/biG05U 03/21 03:19
applecool:謝謝謝謝~~~學到很多^^ 03/22 00:00