我想创建一个指向模板化函数的指针:
template <class T>
void foo(T x){}
int main()
{
template <class T>
void (*ptr)(T);
return 0;
}
我上面有错误:error C2951: template declarations are only permitted at global or namespace scope
所以我可以通过在全局范围内声明指向模板化函数的方法来修复它并且它可以正常工作:
template <class T>
void foo(T x){ cout << "foo()" << endl;}
template <class T>
void (*ptr)(T);
int main()
{
ptr = foo;
(*ptr)(7);
return 0;
}
答案 0 :(得分:10)
功能模板 不 功能。 函数指针只能分配给匹配签名的函数。
在此声明中:
template <class T>
void foo(T x){ cout << "foo()" << endl;}
foo
是功能模板。直到在生成函数之前实例化它。因此,您只能获得指向foo
的实例化的函数指针。
假设您有一个函数指针Ktr
,您只能将其分配给foo
的实例化,如下所示:
void (*Ktr)(int);
Ktr = foo<int>;
在此声明中:
template <class T>
void (*ptr)(T);
您声明了variable template (C++14)函数指针类型,将T
类型的对象作为唯一参数。