如何将具有模板参数的函数传递给其他函数?
template <class _T>
void inc(int &x) {
x++;
}
template <class FUNC>
void add(int &x, FUNC f) {
f(x);
}
int main() {
int x = 0;
add(x, inc);
return 0;
}
所以,我得到&#34;错误:没有匹配函数来调用&#39;添加&#39;&#34;。
答案 0 :(得分:6)
inc
是一个模板,而不是一个函数。您需要通过inc<int>
:
template <class _T>
void inc(int &x) {
x++;
}
template <class FUNC>
void add(int &x, FUNC f) {
f(x);
}
int main() {
int x = 0;
add(x, inc<int>);
return 0;
}
(修正了主函数中的拼写错误f
而不是添加。)
答案 1 :(得分:5)
您忘记将模板参数传递给模板化函数:
template <class _T>
void inc(int &x) {
x++;
}
template <class FUNC>
void add(int &x, FUNC f) {
f(x);
}
int main() {
int x = 0;
add(x, inc<int>); // <-- here
return 0;
}