2010-05-27 95 views
1

我想知道是否可以創建一個模板函數,然後創建一個指向該模板函數的函數指針。這可能嗎?是否有可能在C++中有一個函數指針指向模板函數?

我使用VS2008。

下面的代碼得到這個編譯時錯誤:

「無法從‘重載函數’轉換爲‘INT(__cdecl *)(INT &,詮釋&)’的所有功能都具有此名稱的範圍匹配目標類型「

template<typename T> 
T tfunc(const T &x, const T &y){ 
    return (x < y ? x : y); 
} 

int (*tfunc_ptr)(int &, int &) = &tfunc<int>; 
+0

什麼是__cdecl的目的是什麼? – sellibitze 2010-05-27 16:32:11

+0

永遠不要編輯您的問題以納入正確的答案。只要保持原樣,讓人們閱讀下面的答案。 – 2010-05-27 19:57:42

+1

更重要的是,不要只是刪除問題內容 - 以後閱讀這些內容的人需要回答的上下文。 – 2010-05-27 19:59:21

回答

11

您的論點是錯誤的。 tfunc需要的是const引用的參數,所以你的函數指針必須做同樣的事情;

int (*tfunc_ptr)(const int &, const int &) = &tfunc<int>; 
+0

工作。謝謝。 – LoudNPossiblyWrong 2010-05-27 16:42:56

2

嗯......你的答案發生了什麼?這是正確的。您需要提供模板參數:

int (*tfunc_ptr)(int const&,int const&) = &tfunc<int>;

哦,注意引用。你的模板有他們,你的funptr沒有。這需要匹配。

+0

沒有工作,我更新了我發佈的編譯錯誤,我得到了。 – LoudNPossiblyWrong 2010-05-27 16:41:14

+0

@LoudNPossiblyRight:你的參數不匹配:'int&'與'T const'相比,'T'是'int'。請注意,'const' **是簽名的一部分。 – 2010-05-27 16:43:36

3
template<typename T> 
T tfunc(const T &x, const T &y){ 
return (x < y ? x : y); 
} 

int (*tfunc_ptr)(const int&, const int&) = tfunc<int>; 

int main() { 
    int b = tfunc_ptr(1, 2); 
} 
相關問題