是否有可能在c ++中有一个指向模板函数的函数指针?

时间:2010-05-27 16:30:14

标签: c++ templates

我想知道是否可以创建模板函数,然后创建指向该模板函数的函数指针。这可能吗?

我正在使用VS2008。

以下代码获取此编译时错误:

“无法从'overloaded-function'转换为'int(__ cdecl *)(int&,int&)'在范围内具有此名称的所有函数都不匹配目标类型”

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

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

3 个答案:

答案 0 :(得分:11)

你的论点是错误的。 tfunc带有const引用的参数,所以你的函数指针必须做同样的事情;

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

答案 1 :(得分: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 );
}

答案 2 :(得分:2)

嗯......你的答案怎么了?这是对的。您需要提供模板参数:

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

哦,请注意参考文献。你的模板有它们,你的funptr没有。这需要匹配。