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

ris*_*ngh 3 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;
}
Run Code Online (Sandbox Code Playgroud)

所以,我得到"错误:没有匹配函数来调用'添加'".

sfj*_*jac 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;
}
Run Code Online (Sandbox Code Playgroud)

(修正了f主函数中的拼写错误,而不是添加.)


Bor*_*der 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;
}
Run Code Online (Sandbox Code Playgroud)