我试图写一个简单的模板,我可以为记忆化与功能以一个参数使用:为什么模板参数扣除/替换在这里失败?
#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