假设以下几点:带重载的显式模板函数专业化:为什么要这样做?
template <typename T> void foo (T*); // #1
template <typename T> void foo (T); // #2
template <> void foo (int*); // #3
当引入一个基本模板也具有过载的显式专业化,专业化不被设计过载解析期间考虑。我明白这一点。
但是,鉴于我可以让#3成为非模板重载,然后将其视为重载解析,为什么我仍然想按照上面所做的那样做?上面演示的设置是否有一个有效的用例?我能想到的唯一情况是,如果您不依赖模板类型推演,则无法使用非模板函数,因为当您调用它们时,它们不会接受<>
语法。
顺便说一句我只查看了C++ 03的规则。我不确定C++ 11是否会/如何更改这些规则/行为。
必读:[GotW#49 - 模板专业化和超载](http://www.gotw.ca/gotw/049.htm) - TL; DR不要这样做。 – sehe 2014-12-03 20:20:45
这不是重复的。我在问你什么时候会使用显式函数专门化和重载。或者,如果不应该这样做。链接问题的答案不能解决这个问题。 – 2014-12-03 20:24:29
也许你的代码中有一个基于非模板的foo,它需要一个int *。添加模板专业化意味着你可以是明确的,并使用foo(&i); –
cppguy
2014-12-03 21:04:55