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