2014-10-30 110 views
3

如何將具有模板參數的函數傳遞給其他函數?將模板作爲模板參數的函數

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

所以,我得到「錯誤:沒有匹配函數調用'添加'」。

回答

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

5

你忘了模板參數傳遞給模板功能(固定錯字在主函數而不是相加調用f):

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; 
} 
相關問題