第7条 为什么不特化函数模板
有一个概念,我以前对偏特化不是特别清晰明了,模板分成类模板和函数模板,我原来是一致看待的。但是事实上,函数模板能不能偏特化,只能重载,每个看个偏特化的函数模板其实都是重载。
有一个概念,我以前对偏特化不是特别清晰明了,模板分成类模板和函数模板,我原来是一致看待的。但是事实上,函数模板能不能偏特化,只能重载,每个看个偏特化的函数模板其实都是重载。
函数模板并不参加重载决议,只有当主模板被选中,才有可能去选择某个特化版本。
而且在选择主模板的时候,编译器并不关心特化模板。所以,如果你确实需要某个特化版本,那么写成普通函数参与重载决议就可以了。重载决议是编译器的消耗,对运行期没有影响。应当避免函数模板的特化,因为普通函数就可以替代。
如果你需要提供接口给用户来具体实现,那么使用Sutter的办法。函数模板写成一个孤立的、永远不被特化的版本。其实现包含在一个包含静态函数的类模板中。这样特化、偏特化都没有问题。
记住,特化模板函数不是一个好的选择。