【发布时间】:2014-05-03 07:19:43
【问题描述】:
我想写以下内容:
template <typename S, typename T> void foo() {
/* code for the general case */
}
template <typename T> void foo<MySType,T>() {
/* partially specialized code - for any kind of T, but when S is MySType */
}
或者,在其他情况下,如下:
template <typename S, typename T> void bar(const S& a, const T& b) {
/* code for the general case */
}
template <typename T> void bar<MySType,T>(const MySType& a, const T& b) {
/* partially specialized code - for any kind of T, but when S is MySType */
}
C++(11) 不允许我这样做。
现在,我读到了this question and its answers;假设我购买了为什么我们没有部分模板专业化的解释(或者只是假设我生活在现实中并且实际上想要编写代码)。好吧,我做什么,而不是?
我真的不想将这些函数包装在一个类中,除非那绝对是我最后的手段。
【问题讨论】:
-
老实说,我越是深入研究 C++11 和 C++,我就越认为“模板专业化”对于正在发生的事情来说是一种可怕的限定。没有“模板专业化”之类的东西
-
@user2485710:对不起,我不明白……你能详细说明一下吗?或者链接到您更详细地争论过的地方?
-
模板专业化不仅是一件事,它还是一台图灵完备的机器。不过,它会让你发疯。
-
“专业化”意味着您正在增强已经存在的东西的属性,模板签名能够执行的是类型推断或类型推导,以创建您需要的功能。要专门化你需要至少 1 个已经存在的东西加上至少 1 个属性来增强/更改的东西,我不明白为什么有人会称之为“模板专业化”,而实际上只有一些类型推断和类型推导。有人甚至称这种“过载”为仅在运行时发生的事情。
-
@user2485710:嗯,我认为这是专业化,因为我们对待特殊情况与一般情况不同,仅此而已。
标签: c++ templates template-specialization overloading partial-specialization