让:
int id(int x) { return x; }
以下代码使用GCC编译:
template <typename F> int f2(F f, int x) { return f(x); }
int id2(int x) { return f2(id, x); }
但以下内容无法编译:
template <typename F> int f1(int x) { return F(x); }
int id1(int x) { return f1<id>(x); }
有人可以解释一下这有什么问题吗?
答案 0 :(得分:4)
它不会编译,因为sum
需要一个类型,而你正在给它一个函数,例如typename F
这是一个非类型模板参数。
int(*F)(int)
这可以进一步简化,并使用C ++ 17更加通用:
int id(int x) { return x; }
template <int(*F)(int)> // here
int f1(int x) { return F(x); }
int id1(int x) { return f1<id>(x); }