我試圖寫一個簡單的模板,我可以爲記憶化與功能以一個參數使用:爲什麼模板參數扣除/替換在這裏失敗?
#include <map>
template <typename F,typename OUT,typename IN>
OUT memoization(IN in){
static std::map<IN,OUT> memo;
static typename std::map<IN,OUT>::iterator found = memo.find(in);
if (found != memo.end()) { return found->second; }
OUT res = F(in);
memo(in) = res;
return res;
}
double test(double x) { return x*x; }
int main(){
for (int i=0;i<5;i++){
memoization<test,double,double>(i*0.5);
}
}
,但我得到的錯誤:
error: no matching function for call to 'memoization(double)'
note: candidate is:
note: template OUT memoization(IN)
note: template argument deduction/substitution failed:
爲什麼這個編譯失敗?
其實我不明白爲什麼模板參數扣除/替換髮生在我指定所有模板參數時。
我使用gcc版本4.7.2(沒有C++ 11啓用)
PS:模板有更多的錯誤,比我第一次意識到,但我離開它是...
'測試'不是一種類型。 'decltype(test)'是。 – MadScientist