使用模板作为模板参数的功能

时间:2014-10-30 20:12:02

标签: c++ templates

如何将具有模板参数的函数传递给其他函数?

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;。

2 个答案:

答案 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;
}