2010-05-27 30 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); 
} 
相关问题