gpt4 book ai didi

c++ - 完全专用的模板函数是否与常规函数相同?

转载 作者:太空狗 更新时间:2023-10-29 23:10:50 25 4
gpt4 key购买 nike

如果我有:

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

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

完全专用函数和我的其他常规函数有什么区别。

例如,在标题中我必须有这些声明加上模板定义;尽管如此,我可以在源文件中对所有其他常规函数进行专门定义。它们是一样的吗?

这是否比在 header 中将专用模板定义为 inline 更好?

最佳答案

当模板自身被重载决策选择时,函数模板特化决定调用的效果(它使用特化的签名,而不是定义).无论特化是隐式还是显式生成,都是如此。

一个单独的函数自己参与重载决策,与函数模板竞争略有优势,可以很容易地通过模板参数推导来抵消(虽然不是在这里,因为你的T 无法推导)。它可以通过使用显式模板参数列表(如果可以推导出所有模板参数,即使是空的)也可以完全排除,这意味着模板仍应为所有类型提供合理的定义(即使有些被删除或不编译)。

对于 inline,关注点与任何函数的关注点没有什么不同:在 header 中提供定义对于优化很重要,允许仅包含 header 的库,减少文本重复,……或者只会产生更紧密的耦合,使代码更难更改。由于主模板的定义通常必须在标题中,因此可能会倾向于将特化的定义也放在那里。与往常一样,需要了解应用程序和判断。

关于c++ - 完全专用的模板函数是否与常规函数相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54622608/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com