【发布时间】:2011-07-03 08:35:39
【问题描述】:
我知道语言规范禁止函数模板的部分特化。
我想知道为什么它禁止它的理由?它们没有用吗?
template<typename T, typename U> void f() {} //allowed!
template<> void f<int, char>() {} //allowed!
template<typename T> void f<char, T>() {} //not allowed!
template<typename T> void f<T, int>() {} //not allowed!
【问题讨论】:
-
对于
template<typename T, typename U> void f(T t, U u) {}也允许template<> void f(int t, char u) {}。 -
我觉得有趣的是,当问题不是“我怎样才能实现类似的目标”而是“这种行为背后的基本原理是什么”时,人们不断提供解决方法......我自己也不知道原因这种选择,但我认为委员会一定有理由禁止功能模板部分专业化。到目前为止,“最接近”的解释是 Georgy 发布的链接,该链接仅指出存在重载时函数模板部分特化的潜在“风险”。但是,我认为这不是禁止此功能的理由,所以我认为还有更多……
标签: c++ language-design template-specialization partial-specialization function-templates