我想知道是否可以创建模板函数,然后创建指向该模板函数的函数指针。这可能吗?
我正在使用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>;
答案 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没有。这需要匹配。