【发布时间】:2015-08-23 07:05:31
【问题描述】:
这是我想做的:
template<int I> struct banana {
float number;
banana(float n) {
number = n;
}
int getNumber() {
return number;
}
};
template<> float banana<0>::getNumber() {
return number;
}
所以当一个新的香蕉 生成时,它会以浮点数而不是整数的形式返回数字。编译器不会让我。
我找到了看似相同问题https://stackoverflow.com/a/15912228/4049658 的答案(尽管如此,我可以使用 c++ 11 但不是 14,如果这会有所不同)但我不明白它是如何工作的,或者它是否甚至是相同的东西。
【问题讨论】:
-
您的代码示例看起来很荒谬。你真正想达到什么目标?
-
这在我看来不像模板函数,更像是(模板化)类中的普通函数。
-
这是我想在课堂上添加的品质的最小说明。真正的类是模板类型数据数组的包装器,它应该总是返回浮点数。由于某些受支持的原始数据类型是不可分割的,因此我需要重新解释它们,因此我返回一个代理,该代理具有为括号运算符中的赋值运算符定义的 setter 函数。
-
所以答案是“是的,但是示例代码不是模板化函数,而是模板化类”。
-
banana<0>不作为单独的类存在,它只是模板的实例化(元函数的结果)。您需要将banana<0>定义为不同的类(显式模板特化)。
标签: c++ templates template-specialization