定义函数模板特化的正确语法是什么?
在 C++ Primer Plus(2001,捷克语翻译)中,我发现了这些不同的模板专业化语法:
函数模板
template <typename T> void foo(T);
专业化语法
void foo(int param); // 1
void foo<int>(int param); // 2
template <> void foo<int>(int param); // 3
template <> void foo(int param); // 4
template void foo(int param); // 5
谷歌了一下,我只找到了第 3 个例子。它们之间(调用、编译、使用)有什么区别吗?其中一些是否已过时/已弃用?为什么不直接使用No.1呢?
In C++ Primer Plus (2001, Czech Translation) I have found these different template specialization syntax:
function template
template <typename T> void foo(T);
specialization syntax
void foo(int param); // 1
void foo<int>(int param); // 2
template <> void foo<int>(int param); // 3
template <> void foo(int param); // 4
template void foo(int param); // 5
Googling a bit, I have found only No.3 examples. Is there any difference (in call, compiling, usage) among them? Are some of them obsolete/deprecated? Why not just use No.1?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
以下是每种语法的注释:
由我添加:
从编码的角度来看,重载优于函数模板专业化。
因此,不要专门化函数模板:
并了解术语:
请参阅:
Here are comments with each syntax:
Added by me:
From coding point of view, overload is preferred over function-template-specialization.
So, don't specialize function template:
And to know the terminologies:
See this :
使用 Visual Studio 2012,如果没有函数参数,它的工作方式似乎略有不同:
Using Visual Studio 2012, it seems to work slightly different if there's no function argument: