Yel*_*aYR 4 c++ templates overloading class function
在C++中如何从参数值模拟返回值是唯一的?我的代码如下所示 - 现在如果数字的数据类型为int,我希望它作为双出去.
template <class T>
T divide(T number)
{
return number/10;
}
Run Code Online (Sandbox Code Playgroud)
在主要我有这个
divide(5);
divide(2.5);
Run Code Online (Sandbox Code Playgroud)
在2.5的情况下,进入和退出的值将是double类型,因此没有问题,但在5的情况下,它作为int进入,但我需要它不被截断并返回为double类型.
template <class T, Class T1>
T1 divide(T number)
{
return number/10;
}
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为它在函数中寻找两个参数.
T1 template <class T>
T1 divide(T number)
{
return number/10;
}
Run Code Online (Sandbox Code Playgroud)
这给了我没有存储类或类型说明符的声明 - 当我在T1之前将该单词class添加到该行时,我收到错误消息:function返回不完整的类型.
最通用的方法是使用辅助模板
template <typename T>
struct calc_return {
using type = T;
};
template <class T>
typename calc_return<T>::type divide(T number)
{
return number/10;
}
Run Code Online (Sandbox Code Playgroud)
现在,如果规则有例外,您可以专门calc_return使用您想要的任何逻辑:
// Prior to the declaration of divide()
template <>
struct calc_return<int> {
using type = double;
};
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我认为你想要
template <class T>
auto divide(T number) -> decltype(number/10.0)
{
return number/10.0;
}
Run Code Online (Sandbox Code Playgroud)
如果您至少除以 10.0 而不是 10,编译器就会知道返回类型应该是什么。
或 C++14 风格:
template <class T>
auto divide(T number) // Compiler will figure it out from the return statement.
{
return number/10.0;
}
Run Code Online (Sandbox Code Playgroud)