为什么不特化函数模板?


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

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

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

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

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

如果你正在写一个可能需要被特化的主函数模板的话,请尽量将它写成一个孤立的,永远不该被特化或重载的函数模板, 并将其具体实现全部放入一个包含了一个静态函数的类模板当中, 这么一来任何人都可以对后者进行特化(包括偏特化), 而同时又不会影响到主函数模板的重载决议.
posted @ 2009-11-09 02:53  史莱姆  阅读(669)  评论(0编辑  收藏  举报