void func1(int){}
void func2(char){}
template <typename T> void (*p)(T); // error
p = func1;
p = func2;
为什么我们不能定义像这样的指针p
?
感谢@SergeyA和@Brian的帮助,我解决了问题,并在这里编辑了答案。
template<typename T> void (*p)(T)
:在这种情况下,p
是一个变量模板(c ++ 14)。所以我们可以这样使用p
:
p<int> = func1;
p<char> = func2;
template<class T> using p = void (*)(T)
:在这种情况下p
是一种类型(就像,typedef
但是我们不能使用typedef
别名模板)。意味着我们应该像这样使用它:
p<int> x1 = func1;
p<char> x2 = func2;
顺便说一句,它们两个都是template declaration
,所以我们不能将它们放在任何块范围内。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句