[問題] Template of Template?

作者: RouterHsieh (醉臥美人膝,醒掌天下權)   2015-01-04 12:24:10
在下今天正在練習template和function overloading的時候遇到一個問題,
(其實是Essential C++這本書的習題2.6延伸的)
假設我現在有兩個以下的template:
template <typename Type>
Type my_max(vector<Type> &tvec)
{
Type max = tvec[0];
for (int i = 1; i < tvec.size(); i++) {
if (tvec[i] > max)
max = tvec[i];
}
return max;
}
template <typename Type>
Type my_max(Type *tarr, int size)
{
Type max = tarr[0];
for (int i = 1; i < size; i++) {
if (tarr[i] > max)
max = tarr[i];
}
return max;
}
基本上我的my_max函式要做的很簡單,就是要能夠從vector/array當中,
把值最大的挑出來然後回傳。
當然vector/array的差別在於前者知道自己的size,但後者不知道。
所以當這個函式(my_max)用在array上的時候必須多傳入一個size的參數才行。
(因此在這裡可以用function overloading來解決)
我在想的是,既然上面兩個template function長的其實很像的情況下,
有可能再進一步的把上面這兩個template function化簡成單一的template嗎@@
(還是說其實這種狀況原本就是要用function overloading來解決?)
在下才剛開始學C++而已,所以可能問了個蠢問題,還請大家不吝指正,感謝~~
作者: PkmX (阿貓)   2015-01-04 12:30:00
iterator
作者: cjcat2266 (CJ Cat)   2015-01-05 03:25:00
第一個版本去呼叫第二個版本my_max(&tvec[0], tvec.size())
作者: ibmibmibm (BestSteve)   2015-01-06 20:55:00
作者: Killercat (殺人貓™)   2015-01-07 01:48:00
其實嚴格講起來這不叫做template of template XD真正的template of template大概是長這樣template <template <typename> class T> class foo
作者: a27417332 (等號卡比)   2015-01-07 11:47:00
看到template template parameter嘞
作者: Killercat (殺人貓™)   2015-01-07 15:23:00
這東西寫起來 沒幾個人會維護的.... 很麻煩

Links booklink

Contact Us: admin [ a t ] ucptt.com