为什么不特化函数模板?


1. C++标准规定,函数模板不能偏特化
2. 函数模板的特化并不参与重载决议
非模板函数是C++的一等公民

如果编译器没有发现合适的一等公民, 那么主函数模板作为C++中的二等公民被纳入考虑

如果还不能选出唯一的主函数模板,编译器会根据一组相当晦涩的规则确定出那个主函数模板是最特化的

函数模板特化并不参与重载决议.只有在某个主模板被重载的决议前提下,其特化版本才有可能被使用.而且编译器在选择住模板的时候并不关心他是否有某个特化版本.

如果你想要将一个主模板特化,同时又希望该特化版本能够参与重载决议, 只需将其写成普通函数. 如果你确实提供了某个函数模板的重载,那么你应该避免为他提供特化.

如果你正在写一个可能需要被特化的主函数模板的话,请尽量将它写成一个孤立的,永远不该被特化或重载的函数模板, 并将其具体实现全部放入一个包含了一个静态函数的类模板当中, 这么一来任何人都可以对后者进行特化(包括偏特化), 而同时又不会影响到主函数模板的重载决议.

转载于:https://www.cnblogs.com/slime/archive/2009/11/09/1598748.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值