【发布时间】:2017-01-27 03:36:22
【问题描述】:
我正在尝试编写一个简单的模板,我可以将它用于带有单个参数的函数的记忆:
#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);
}
}
但我得到了错误:
错误:没有匹配的函数调用'memoization(double)'
注意:候选人是:
注意:模板 OUT memoization(IN)
注意:模板参数扣除/替换失败:
为什么编译失败?
实际上我不明白为什么在我指定所有模板参数时会发生模板参数扣除/替换。
我使用的是 gcc 版本 4.7.2(未启用 C++11)
PS:模板的错误比我最初意识到的要多得多,但我保持原样......
【问题讨论】:
-
test不是类型。decltype(test)是。
标签: c++ templates memoization