完全专用的模板功能是否与常规功能相同?

时间:2019-02-11 00:39:20

标签: c++ function-templates

如果我有

template <typename T>
bool name (std::string);

template <> bool name<int>(std::string);

完全专业化功能与我的其他常规功能有什么区别

例如,在标题中,我将必须具有这些声明以及模板定义;但是,我可以在所有其他常规函数的源文件中有专门的定义。他们是一样的吗?

与在标题中将专用模板定义为inline相比,这是更好的做法吗?

1 个答案:

答案 0 :(得分:0)

当通过过载解析(使用签名而不是定义的定义)选择模板本身时,功能模板专长确定调用的效果 )。无论是隐式生成还是显式生成专业化,都是如此。

一个单独的函数独自参与了重载解析,与函数模板进行了竞争,这有一个轻微的优势,可以很容易地通过模板参数推导来抵消(尽管这里不是,因为您的{{1} }不能推论)。可以通过使用显式模板参数列表将其完全排除(如果可以推导所有模板参数,甚至可以是一个空列表),这意味着仍应为所有类型赋予模板合理的定义(即使有些被删除或无法编译。

对于T来说,关注点与任何函数都没有什么不同:在标头中提供定义对于优化很重要,允许使用仅标头的库,减少文本重复,…或只是产生更严格的含义耦合使代码更难更改。由于主要模板的定义通常必须位于标头中,因此可能也倾向于将专门化的定义放在其中。与往常一样,需要了解应用程序和判断。