是否可以更改专门化模板函数的返回类型?
Is it possible to change return type of a specialized template function?
我想这样做:
template<int I> struct banana {
float number;
banana(float n) {
number = n;
}
int getNumber() {
return number;
}
};
template<> float banana<0>::getNumber() {
return number;
}
所以当一个新的香蕉<0>生成时,它会返回一个浮点数而不是整数。但是编译器不允许。
我找到了一个答案,似乎同样的问题https://stackoverflow.com/a/15912228/4049658(虽然,我可以使用c++ 11,但不是14,如果有区别的话),但我不明白它是如何工作的,或者如果它甚至是同一件事。
特殊化返回类型的简单方法是使用std::conditional:
// First approach: conditional
template<int I> struct banana {
float number;
banana(float n) {
number = n;
}
// C++14 std::conditional_t<I == 0, float, int>
typename std::conditional<I == 0, float, int>::type
getNumber() {
return number;
}
};
或者如你所建议的,你可以使用模板专门化:
template<int /*I*/>
struct banana_return_type
{
using type = int;
};
template<>
struct banana_return_type<0>
{
using type = float;
};
template<int I> struct bananaSecond {
float number;
bananaSecond(float n) {
number = n;
}
typename banana_return_type<I>::type
getNumber() {
return number;
}
};
演示给定:
template<int I> struct banana {
float number;
banana(float n) {
number = n;
}
int getNumber() {
return number;
}
};
在这一点上,banana<0>
不是一个不同的用户定义类,而是一个模板的实例化,所以下面是不正确的:
template<> float banana<0>::getNumber() {
return number;
}
你需要使banana<0>
是一个明确定义的类:一个显式的模板专门化。
template<> struct banana<0> {
float number;
banana(float n) {
number = n;
}
float getNumber() {
return number;
}
};
相关文章:
- 检查函数返回类型是否与STL容器类型值相同
- 警告:在函数返回类型 [-Wignore 限定符] 时忽略类型限定符
- 在 c++ 中将函数返回类型指定为模板参数
- 通过引用传递参数;函数返回类型是否必须为 VOID?
- 如何避免模板函数返回类型重复?
- 从类型bankAccount的返回值到函数返回类型int没有可行的转换
- 为什么在某些情况下从函数返回类型中删除 cv 限定符?
- 模板类内模板类的函数返回类型
- 为什么函数返回类型中不允许参数推导?
- 函数返回类型之前的"define"
- C++推断要隐式调用的模板函数返回类型
- 具有不同模板参数的函数返回类型
- 当函数返回类型为父类时,如何返回子类的对象?
- C++:在原型中声明"auto"函数返回类型仍然会导致在扣除错误之前使用"auto&quo
- C++14 'auto'能够获取函数返回类型,我们还需要 std::result_of<> 吗?
- 函数返回类型中的模板类型推断
- 嵌套模板类返回类型在 C++ 中的头文件中函数返回类型的语法
- C++重写 void 函数返回类型会导致生成失败
- 从函数内部推断函数返回类型
- C++嵌套类函数返回类型和命名空间