use*_*993 3 c++ templates template-specialization
这是我想做的:
template<int I> struct banana {
float number;
banana(float n) {
number = n;
}
int getNumber() {
return number;
}
};
template<> float banana<0>::getNumber() {
return number;
}
Run Code Online (Sandbox Code Playgroud)
因此,当创建一个新的 Banana<0> 时,它会返回浮点数而不是整数。但编译器不会让我这样做。
我找到了看似相同问题的答案/sf/answers/1113855991/(尽管如此,我可以使用 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;
}
};
Run Code Online (Sandbox Code Playgroud)
或者正如您所建议的,您可以使用模板专业化:
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;
}
};
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1147 次 |
最近记录: |